Rotations-Problem

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

BlackFog

Betreff: Rotations-Problem

BeitragSa, Mai 05, 2007 17:15
Antworten mit Zitat
Benutzer-Profile anzeigen
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 Very Happy

MFG

BlackFog

LukasBanana

BeitragSa, Mai 05, 2007 21:39
Antworten mit Zitat
Benutzer-Profile anzeigen
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?! Smile

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

BeitragSo, Mai 06, 2007 9:00
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSo, Mai 06, 2007 9:31
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSo, Mai 06, 2007 9:38
Antworten mit Zitat
Benutzer-Profile anzeigen
Perfekt , klappt jetzt einwandfrei .

Vielen Dank

MFG

BlackFog

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group