Atan2

Übersicht BlitzBasic Beginners-Corner

Gehe zu Seite Zurück  1, 2, 3  Weiter

Dieses Thema ist gesperrt, du kannst keine Beiträge editieren oder beantworten.

 

Razor1994

BeitragMi, Jul 08, 2009 15:44
Antworten mit Zitat
Benutzer-Profile anzeigen
ok ich versuchs mal.
danke
 

Razor1994

BeitragMi, Jul 08, 2009 16:26
Antworten mit Zitat
Benutzer-Profile anzeigen
Es funktioniert nicht es kommt immer Expecting 'End Function'

Hier mein CodeCode: [AUSKLAPPEN]

Graphics 800, 600, 0, 2
SetBuffer BackBuffer()
AutoMidHandle 1

Global player = LoadImage("C:\Programme\Blitz2DDemo\help\resources\samples\Graphics\player.bmp")

Global player_x=250
Global player_y=300

Dim spielerbild(3)
For i = 0 To 3
 spielerbild(i) = player
Next

Repeat
Cls

 moveHero()
 turnHeroimage()
 turnHero()

Flip
Until KeyHit(1)
End

Function moveHero()
 If KeyDown(203) Then player_x=player_x-5
 If KeyDown(205) Then player_x=player_x+5
 If KeyDown(208) Then player_y=player_y+5
 If KeyDown(200) Then player_y=player_y-5
DrawImage player,player_x,player_y
End Function

; Spielerbild in Gehrichtung
Function turnHeroimage()
 spielerbild(0) = 0
 spielerbild(1) = 90
 spielerbild(2) = 180
 spielerbild(3) = 270
End Function

Function turnHero()
 If KeyHit(203) Then DrawImage spielerbild(3),player_x,player_y
 If KeyDown(205) Then DrawImage spielerbild(1),player_x,player_y
 If KeyDown(208) Then DrawImage spielerbild(2),player_x,player_y
 If KeyDown(200) Then DrawImage spielerbild(0),player_x,player_y
End Function
  • Zuletzt bearbeitet von Razor1994 am Mi, Jul 08, 2009 16:29, insgesamt einmal bearbeitet

Nicdel

BeitragMi, Jul 08, 2009 16:27
Antworten mit Zitat
Benutzer-Profile anzeigen
Mach mal bei turnHeroImage die ganzen ° weg.
Desktop: Intel Pentium 4 2650 Mhz, 2 GB RAM, ATI Radeon HD 3850 512 MB, Windows XP
Notebook: Intel Core i7 720 QM 1.6 Ghz, 4 GB DDR3 RAM, nVidia 230M GT, Windows 7
 

Razor1994

BeitragMi, Jul 08, 2009 16:29
Antworten mit Zitat
Benutzer-Profile anzeigen
Jetzt kommt wenn ich eine Pfeiltaste drücke image does not exist.

Nicdel

BeitragMi, Jul 08, 2009 16:30
Antworten mit Zitat
Benutzer-Profile anzeigen
Dann ist das Bild wohl nicht an der Stelle, von der du es lädst.
Desktop: Intel Pentium 4 2650 Mhz, 2 GB RAM, ATI Radeon HD 3850 512 MB, Windows XP
Notebook: Intel Core i7 720 QM 1.6 Ghz, 4 GB DDR3 RAM, nVidia 230M GT, Windows 7
 

Razor1994

BeitragMi, Jul 08, 2009 16:31
Antworten mit Zitat
Benutzer-Profile anzeigen
doch sicher sonst funktionierts ja auch und es ist ja auch auf dem bildschirm nur wenn ich eine Pfeiltaste drücke dann kommt das.
 

tobias12

BeitragMi, Jul 08, 2009 16:32
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]
If KeyHit(203) Then DrawImage ,player_x,player_y, spielerbild(3)


so sollte es sein, nicht Code: [AUSKLAPPEN]
If KeyHit(203) Then DrawImage spielerbild(3),player_x,player_y


aber überdenke nochmals dein system, ist ein bisschen kompliziert[/quote]
Mein Projekteforum
 

Razor1994

BeitragMi, Jul 08, 2009 16:33
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich probiers mal aber in der Hilfe hier steht

Aufruf

DrawImage bild, x, y [, frame]

Parameter
bild Identität des Bildes (z.B. mit LoadImage ermittelt)
x Koordinate X auf dem Bildschirm
y Koordinate Y auf dem Bildschirm
frame Framebild bei Animationsbildern (ab 0)

Nicdel

BeitragMi, Jul 08, 2009 16:34
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]
If KeyHit(203) Then DrawImage spielerbild(3),player_x,player_y


ist völlig richtig... Rolling Eyes
Desktop: Intel Pentium 4 2650 Mhz, 2 GB RAM, ATI Radeon HD 3850 512 MB, Windows XP
Notebook: Intel Core i7 720 QM 1.6 Ghz, 4 GB DDR3 RAM, nVidia 230M GT, Windows 7
 

Razor1994

BeitragMi, Jul 08, 2009 16:35
Antworten mit Zitat
Benutzer-Profile anzeigen
ok aber wo liegt dann der Fehler?

Nicdel

BeitragMi, Jul 08, 2009 16:43
Antworten mit Zitat
Benutzer-Profile anzeigen
Schreib mal statt
Code: [AUSKLAPPEN]

spielerbild(i) = player

Das hier:
Code: [AUSKLAPPEN]

spielerbild(i) =CopyImage(player)
Desktop: Intel Pentium 4 2650 Mhz, 2 GB RAM, ATI Radeon HD 3850 512 MB, Windows XP
Notebook: Intel Core i7 720 QM 1.6 Ghz, 4 GB DDR3 RAM, nVidia 230M GT, Windows 7

Starwar

BeitragMi, Jul 08, 2009 16:43
Antworten mit Zitat
Benutzer-Profile anzeigen
Du musst player nicht zeichen. Dein System ist zu kompliziert. Lass die Funktionen weg und machs in eine Schleife. Außerdem sind Variablen, sonalge sich keine Arrays, Konstanten oder mit Global definiert wurden, nur lokal, das heißt nur im Hauptprogramm, nicht in Funktionen verfügbar -> Tutorials lesen und verstehen!
MFG
 

Razor1994

BeitragMi, Jul 08, 2009 16:59
Antworten mit Zitat
Benutzer-Profile anzeigen
Und jetzt Code: [AUSKLAPPEN]

Graphics 800, 600, 0, 2
SetBuffer BackBuffer()
AutoMidHandle 1

Global player = LoadImage("C:\Programme\Blitz2DDemo\help\resources\samples\Graphics\player.bmp")

Global player_x=250
Global player_y=300

Dim spielerbild(3)

For i = 0 To 3
 spielerbild(i) = CopyImage (player)
Next

Repeat
Cls
 
 spielerbild(0) = 0
 spielerbild(1) = 90
 spielerbild(2) = 180
 spielerbild(3) = 270

 If KeyDown(203) Then player_x=player_x-5
 If KeyDown(205) Then player_x=player_x+5
 If KeyDown(208) Then player_y=player_y+5
 If KeyDown(200) Then player_y=player_y-5
DrawImage player,player_x,player_y
 
 If KeyHit(203) Then DrawImage spielerbild(3),player_x,player_y
 If KeyDown(205) Then DrawImage spielerbild(1),player_x,player_y
 If KeyDown(208) Then DrawImage spielerbild(2),player_x,player_y
 If KeyDown(200) Then DrawImage spielerbild(0),player_x,player_y

Flip
Until KeyHit(1)
End

Nicdel

BeitragMi, Jul 08, 2009 17:01
Antworten mit Zitat
Benutzer-Profile anzeigen
spielerbild(0) = 0
spielerbild(1) = 90
spielerbild(2) = 180
spielerbild(3) = 270


Dadurch geht das Bild verloren, da du etwas anderes in den Variablen speicherst.
Desktop: Intel Pentium 4 2650 Mhz, 2 GB RAM, ATI Radeon HD 3850 512 MB, Windows XP
Notebook: Intel Core i7 720 QM 1.6 Ghz, 4 GB DDR3 RAM, nVidia 230M GT, Windows 7
 

Razor1994

BeitragMi, Jul 08, 2009 17:03
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja jetzt seh ichs auch aber ich habs genauso gemacht wie ers gesagt hat

Starwar hat Folgendes geschrieben:
Mhh.
Ok, ich werd dir keinen Code geben, dir aber einen Lösungsweg aufschreiben.
Zuerst macht du eine Array von der Göß 4. (Also als Parameter 3 angeben). Dann lädst du das Bild in jeden Arrayeintrag. Du drehst es für jeden Eintag anders. (Arrayeintrag 0 = 0°, AE 1= 90°,...)
Dann kommt die Hauptschleife:
Du machst für jede Pfeiltaste eine If-Bedingung mit KeyHIT. Wenn die erfüllt ist (Taste wurde gedrückt) stellst du die Statusvariable auf eine entsprechende Zahl von 0 bis 3.
Dann zeichnest du das Bild aus dem entsprechendem Array-Eintrag (Array als Parameter für DrawImage Image angeben).
MFG

Nicdel

BeitragMi, Jul 08, 2009 17:05
Antworten mit Zitat
Benutzer-Profile anzeigen
Eher so:

Code: [AUSKLAPPEN]

For i = 0 To 3
 spielerbild(i) = CopyImage (player)
 RotateImage spielerbild(i), i*90 ;Dreht das Bild
Next
Desktop: Intel Pentium 4 2650 Mhz, 2 GB RAM, ATI Radeon HD 3850 512 MB, Windows XP
Notebook: Intel Core i7 720 QM 1.6 Ghz, 4 GB DDR3 RAM, nVidia 230M GT, Windows 7

Starwar

BeitragMi, Jul 08, 2009 17:06
Antworten mit Zitat
Benutzer-Profile anzeigen
Nein.
Wen du genau leist habe ich gesagt du sollt die Bilder in die Array laden.
Code: [AUSKLAPPEN]

player=loadimage(...)
spielerbild(0)=player
spielerbild(1)=player
spielerbild(2)=player
spielerbild(3)=player

EDIT: Wenn es nicht funbktioniert CopyImage benutzen. In B+ funzt es.

Und dann solst du das Bild drehen, nicht die Variable überschreiben.
Code: [AUSKLAPPEN]

Rotateimage spierbild(1),90
Rotateimage spierbild(2),180
Rotateimage spierbild(3),270

Code: [AUSKLAPPEN]

drawimage spierbild(a),x,y

MFG
 

Razor1994

BeitragMi, Jul 08, 2009 17:13
Antworten mit Zitat
Benutzer-Profile anzeigen
Starwar hat Folgendes geschrieben:
Nein.
Wen du genau leist habe ich gesagt du sollt die Bilder in die Array laden.
Code: [AUSKLAPPEN]

player=loadimage(...)
spielerbild(0)=player
spielerbild(1)=player
spielerbild(2)=player
spielerbild(3)=player


Hab ich ja Code: [AUSKLAPPEN]

For i = 0 To 3
 spielerbild(i) = CopyImage (player)


Starwar hat Folgendes geschrieben:

Und dann solst du das Bild drehen, nicht die Variable überschreiben.
Code: [AUSKLAPPEN]

Rotateimage spierbild(1),90
Rotateimage spierbild(2),180
Rotateimage spierbild(3),270

Code: [AUSKLAPPEN]

drawimage spierbild(a),x,y

MFG


Hab ich versucht aber dann hat es sich nur im Kreis gedreht.
 

Razor1994

BeitragMi, Jul 08, 2009 18:34
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich habe es geschafft bis auf das das es nur zu sehen ist wenn man eine Pfeiltaste drückt.
Code: [AUSKLAPPEN]

Graphics 800, 600, 0, 2
SetBuffer BackBuffer()
AutoMidHandle 1

Global player = LoadImage("C:\Programme\Blitz2DDemo\help\resources\samples\Graphics\player.bmp")

Global player_x=250
Global player_y=300

Dim spielerbild(3)


Repeat
Cls
 
For i = 0 To 3
 spielerbild(i) = CopyImage (player)
 RotateImage spielerbild(i), i*90 ;Dreht das Bild
Next

 If KeyDown(203) Then player_x=player_x-5
 If KeyDown(205) Then player_x=player_x+5
 If KeyDown(208) Then player_y=player_y+5
 If KeyDown(200) Then player_y=player_y-5

 If KeyDown(203) Then DrawImage spielerbild(3),player_x,player_y
 If KeyDown(205) Then DrawImage spielerbild(1),player_x,player_y
 If KeyDown(208) Then DrawImage spielerbild(2),player_x,player_y
 If KeyDown(200) Then DrawImage spielerbild(0),player_x,player_y

Flip
Until KeyHit(1)
End

Nicdel

BeitragMi, Jul 08, 2009 18:55
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]

Graphics 800, 600, 0, 2
SetBuffer BackBuffer()
AutoMidHandle 1

Global player = LoadImage("C:\Programme\Blitz2DDemo\help\resources\samples\Graphics\player.bmp")

Global player_x=250
Global player_y=300

Global frame = 0

Dim spielerbild(3)


Repeat
Cls
 
For i = 0 To 3
 spielerbild(i) = CopyImage (player)
 RotateImage spielerbild(i), i*90 ;Dreht das Bild
Next

 If KeyDown(203) Then player_x=player_x-5
 If KeyDown(205) Then player_x=player_x+5
 If KeyDown(208) Then player_y=player_y+5
 If KeyDown(200) Then player_y=player_y-5

 If KeyDown(203) Then frame=3
 If KeyDown(205) Then frame=1
 If KeyDown(208) Then frame=2
 If KeyDown(200) Then frame=0

DrawImage spielerbild(frame), player_x, player_y

Flip
Until KeyHit(1)
End


So müsste es gehen. Es gibt nun eine neue Variable namens "frame", in der die Bewegungsrichtung gespeichert wird. Das Bild wird in jedem Schleifendurchlauf gezeichnet.
Desktop: Intel Pentium 4 2650 Mhz, 2 GB RAM, ATI Radeon HD 3850 512 MB, Windows XP
Notebook: Intel Core i7 720 QM 1.6 Ghz, 4 GB DDR3 RAM, nVidia 230M GT, Windows 7

Gehe zu Seite Zurück  1, 2, 3  Weiter

Dieses Thema ist gesperrt, du kannst keine Beiträge editieren oder beantworten.


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group