Problem mit dem Drehen von Bildern

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

rkinghell

Betreff: Problem mit dem Drehen von Bildern

BeitragSa, Apr 08, 2006 16:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo, Blitzcoder.
Ich bekomme es einfach nicht hin, Bilder zu Drehen.
Ich habe eine Steuerung aus der Vogelperspektive programmiert und hänge jetzt beim Drehen meines Panzers.
Einige Tutorials habe ich mir angesehen, geholfen haben die mir aber nicht.

Hier ist der Code:

BlitzBasic: [AUSKLAPPEN]

Graphics 640,480,16,2
SetBuffer BackBuffer()

x# = 285
y# = 225
speed# = 0

tank = LoadImage("tank.png")
MaskImage tank,255,0,255

Repeat
Cls

If KeyDown(203) Then angle = angle - 3
If KeyDown(205) Then angle = angle + 3
If KeyDown(200) Then speed# = speed# + 0.01
If KeyDown(208) Then speed# = speed# - 0.01

If angle > 360 Then angle = 0
If angle < 0 Then angle = 360

If speed# > 3 Then speed# = 3
If speed# < -3 Then speed# = -3

x# = x# + Cos(angle) * speed#
y# = y# + Sin(angle) * speed#

If x# > 640 Then x# = 0
If x# < 0 Then x# = 640
If y# > 480 Then y# = 0
If y# < 0 Then y# = 480


DrawImage tank,x#,y#

Text 10,10,"speed: " + speed#
Text 10,30,"angle: " + angle + "°"

Flip
Until KeyHit(1)
End


Und hier das Bild vom Panzer:
http://img346.imageshack.us/im...ank7zv.png

Ich hoffe, dass ihr mir helfen könnt.
 

dark19

Gast

BeitragSa, Apr 08, 2006 16:37
Antworten mit Zitat
DU musst das bild erst einmal 360 mit rotateimage drehehn und dann pro winkel die adresse in ein dim fled speichern
 

HW

BeitragSa, Apr 08, 2006 16:45
Antworten mit Zitat
Benutzer-Profile anzeigen
Also die Bewegung hast du im kreisförmigen Bereich ja schon recht gut hingekriegt. Very Happy
Nur solltest du auch das Bild drehen. Da das recht lange dauert, muss man das Bild am Anfang vorberechnen und in Variablen (ein Array) speichern.
Also ungefähr nach dem Schema:
BlitzBasic: [AUSKLAPPEN]
Dim tank(359)
tank(0)=LoadImage("tank.png")
MidHandle tank(0)
TFormFilter 0
For angle=1 To 359
tank(angle)=CopyImage(tank(0))
RotateImage tank(angle),angle
Next

Das ganze dauert recht lange, man kann es aber auch verkürzen, indem man weniger Winkel berechnet, z.B. in 5° Schritten.
Außerdem muss man dann natürlich auch DrawImage tank(angle),x,y benutzen.

rkinghell

BeitragSa, Apr 08, 2006 17:41
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke für die beiden Antworten, ihr zwei.

@HW: Ich hab' das jetzt mal versucht und da kam der selbe Fehler, den ich sonst immer hatte!
Blitz3D gibt eine Fehlermeldung, "Array index out of bounds" aus.
Jetzt habe ich keine Ahnung was das sein kann, hier der Code:

BlitzBasic: [AUSKLAPPEN]

Graphics 640,480,16,2
SetBuffer BackBuffer()
TFormFilter 0

x# = 285
y# = 225
speed# = 0

Dim tank(359)

tank(0)=LoadImage("tank.png")
MidHandle tank(0)

For angle=1 To 359

tank(angle)=CopyImage(tank(0))
RotateImage tank(angle),angle

Next

Repeat
Cls

If KeyDown(203) Then angle = angle - 3
If KeyDown(205) Then angle = angle + 3
If KeyDown(200) Then speed# = speed# + 0.01
If KeyDown(208) Then speed# = speed# - 0.01

If angle > 360 Then angle = 0
If angle < 0 Then angle = 360

If speed# > 3 Then speed# = 3
If speed# < -3 Then speed# = -3

x# = x# + Cos(angle) * speed#
y# = y# + Sin(angle) * speed#

If x# > 640 Then x# = 0
If x# < 0 Then x# = 640
If y# > 480 Then y# = 0
If y# < 0 Then y# = 480


DrawImage tank(angle),x#,y#

Text 10,10,"speed: " + speed#
Text 10,30,"angle: " + angle + "°"

Flip
Until KeyHit(1)
End

Spikespine

BeitragSa, Apr 08, 2006 17:44
Antworten mit Zitat
Benutzer-Profile anzeigen
Die Fehlermeldung bedeutet, dass du auf einen nicht existierenden Feldeintrag zugreifst.
In deinem Fall liegt der Fehler hier:
Code: [AUSKLAPPEN]
If angle > 360 Then angle = 0
If angle < 0 Then angle = 360


ersetze beide 360 durch 359, dann sollte es funktionieren.
Athlon 64 3700+ | 1024 MB RAM | GeForce 7900 GT | Blitz2D, Blitz3D, BlitzPlus, BlitzMax

rkinghell

BeitragSa, Apr 08, 2006 17:55
Antworten mit Zitat
Benutzer-Profile anzeigen
Achso,
von 0 bis 360 sind es 361, weil die 0 mitgezählt wird.
Jetzt klappt es, Danke!
 

blitzatius

BeitragSa, Apr 08, 2006 22:09
Antworten mit Zitat
Benutzer-Profile anzeigen
hallo,
irgendjemand hat doch im forum eine schnelle bilder-dreh-routine gezeigt. irgendwie ist die jetzt verschwunden. hat sie jemand noch?

Spikespine

BeitragSo, Apr 09, 2006 12:07
Antworten mit Zitat
Benutzer-Profile anzeigen
hallo,
http://www.blitz.inarie.de/viewtopic.php?t=384
Athlon 64 3700+ | 1024 MB RAM | GeForce 7900 GT | Blitz2D, Blitz3D, BlitzPlus, BlitzMax
 

blitzatius

BeitragSo, Apr 09, 2006 13:31
Antworten mit Zitat
Benutzer-Profile anzeigen
ojeaa.
hab wohl vergessen, dass es in einem anderen Forum war. Danke

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group