Rotations-Problem
Übersicht

BlackFogBetreff: Rotations-Problem |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Abend,
Also ich bin grade an einem kleinen 2D topdown shooter dran und hänge(im wahrsten Sinne des Wortes) grade an der Rotation. Wenn ich meine Spielfigur mit der Maus rotiere dreht er sich nur bis 180° und springt dann auf null. Es fehlt ein ganzes stück aus der Drehung. Code: [AUSKLAPPEN] Graphics 1024,768,32,2 SetBuffer BackBuffer() TFormFilter 0 tiles = LoadAnimImage("gfx\tileset.bmp",32,32,0,10) Global tile = 1 Dim char(359) Dim map(31,23) Type player Field x Field y End Type p.player = New player p\x = 300 p\y = 300 For winkel = 0 To 359 char(winkel) = LoadImage("gfx\player_char.bmp") MidHandle char(winkel) MaskImage char(winkel),255,0,255 RotateImage char(winkel),winkel*2 Next Repeat Cls mx# = MouseX() my# = MouseY() ;--- Karte zeichnen --- For x = 0 To 31 For y = 0 To 23 DrawBlock tiles,x*32,y*32,map(x,y) Next Next ;--- Karte zeichnen --- ;--- Charakter drehen --- If KeyDown(203) Then winkel= winkel -1 If KeyDown(205) Then winkel= winkel +1 winkel= ATan2(my#-p\y,mx#-p\x) If KeyDown(200) p\x = p\x +Cos(winkel) *3 p\y = p\y +Sin(winkel) *3 EndIf If winkel > 359 Then winkel = 0 If winkel < 0 Then winkel = 359 DrawImage char(winkel),p\x,p\y ;--- Charakter drehen --- Text 100,100,winkel ;--- Map loaden --- load() ;--- Map loaden --- Flip Until KeyHit(1) Function load() karte$ = ReadFile("map.map") For x = 0 To 31 For y = 0 To 23 tile = ReadLine(karte$) map(x,y) = ReadInt(karte$) Next Next CloseFile(karte$) End Function Wenn ihr vllt. die Lösung wisst meldet euch einfach ![]() MFG BlackFog |
||
![]() |
LukasBanana |
![]() Antworten mit Zitat ![]() |
---|---|---|
Also ich hab deinen Code ma ausprobiert, ein anderes Bild eingesetzt, und bei mir hat`s funktioniert.
Weiß jetzt gar nicht warum du bei der Rotation '*2' stehen hast aber bei mir funktioniert des. Ich vermute du hast die relativ aufwändige Rotation und abspeicherung in 360 Bildern gemacht damit die Rotation schneller verläuft, wie?! ![]() Gruß LukasBanana |
||
Mein YouTube Channel: http://www.youtube.com/user/SoftPixel
Mein Twitter Profil: https://twitter.com/LukasBanana Meine Projekte auf github.com: https://github.com/LukasBanana Meine Projekte auf bitbucket.org: https://bitbucket.org/LukasBanana |
BlackFog |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Also ich hab das mit der *2 einfach mal so ausprobiert ändert aber nichts. Mhh ne meine Rotation ist auch nicht besonders aufwendig bzw. die Figur , ist nur ein schwarzer punkt.
MFG BlackFog |
||
flashmaxel |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Das liegt daran die Umkehrfunktion von Tangens Werte von 0 bis 180 bzw -180 bis 0 zurückgibt (und nicht wie du denkst von 0-360) :
Code: [AUSKLAPPEN] winkel= ATan2(p\y-my#,p\x-mx#)
Alle Werte unter 0 beachtest du aber garnicht. Richtig wäre: Code: [AUSKLAPPEN] Dim char(360)
For winkel = -180 To 180 char(winkel+180) = LoadImage("gfx\player.bmp") MidHandle char(winkel+180) MaskImage char(winkel+180),255,0,255 RotateImage char(winkel+180),winkel Next ... winkel= ATan2(p\y-my#,p\x-mx#)+180 DrawImage char(winkel),p\x,p\y Die If Abfragen brauchst du dann nicht mehr ... |
||
Real C programmers never die; they cast to void. |
BlackFog |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Perfekt , klappt jetzt einwandfrei .
Vielen Dank MFG BlackFog |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group