Seite 1 von 1

Schussrichtung in Spiel bestimmen

Verfasst: 21.11.2004 12:33
von Xsoft
Hallo,

ich habe mal so bissl rumgespielt mit PureBasic, und ich habe einen Soldaten, und wenn der Spieler MouseButton(1) drückt, dann schiesst er. Ok, dass alles tut er, nur ich will das er nach Rechts schiesst und nicht nach Links. Ich weiß irgendwie nich mehr weiter. Kann mir da einer helfen?

Code: Alles auswählen

Structure bullet_struc
  pos_x.w
  pos_y.w
  speed_x.w
  speed_y.w
  graphic.w
EndStructure

NewList bullet.bullet_struc()

InitSprite() And InitKeyboard()  And InitMouse()

PlayerX = 20
PlayerY = 600

OpenScreen(1024,768,32,"WW2-NS")

; GRAPHICS
LoadSprite(1,"gfx/soldat.bmp")
LoadSprite(2,"gfx/bullet.bmp")

Repeat
  
  ClearScreen(0,0,0)
  
  ForEach bullet()
    bullet()\pos_x = bullet()\pos_x + bullet()\speed_x
    bullet()\pos_y = bullet()\pos_y + bullet()\speed_y
    DisplaySprite(bullet()\graphic, bullet()\pos_x, bullet()\pos_y)
    If bullet()\pos_y <= 0
      DeleteElement(bullet())
    EndIf
  Next bullet()
  
  DisplaySprite(1, PlayerX,PlayerY) 
  
  FlipBuffers()
  
  If KeyboardPushed(#PB_Key_D)
    PlayerX + 6
  EndIf
  
  If KeyboardPushed(#PB_Key_A)
    PlayerX - 6
  EndIf 
  

  If MouseButton(1)
    If space = 0
      space = 1
      AddElement(bullet())
      bullet()\pos_x = PlayerX
      bullet()\pos_y = PlayerY
      bullet()\speed_y = 0
      bullet()\speed_x = -20
      bullet()\graphic = 2
    EndIf
  Else
    space = 0
  EndIf 

  ExamineKeyboard()
  ExamineMouse()
  
Until MouseButton(2)
:D MfG

Edit by NicTheQuick: Thread-Titel aussagekräftiger gemacht

Verfasst: 21.11.2004 12:36
von Ynnus
Der Fehler ist doch recht simpler Natur:

Code: Alles auswählen

 bullet()\speed_x = -20 
Wenn das -20 heißt, und du den Speed zur Position dazu zählst, ergibt dass dann + - 20, was im Endeffekt - 20 ergibt. Da muss also einfach nur ein "20" stehen und schon fliegen die Schüsse nach rechts. ;)

Verfasst: 21.11.2004 12:38
von Xsoft
Sunny, du hast mir jetz schon 2 mal geholfen ! Vielen Dank ;)

MfG

Verfasst: 21.11.2004 12:44
von Ynnus
Du könntest auch eine Art Richtung für den Spieler festlegen und die Geschosse dann in diese Richtung zeigen lassen. Etwa so:

Code: Alles auswählen

Structure bullet_struc
  pos_x.w
  pos_y.w
  speed_x.w
  speed_y.w
  graphic.w
EndStructure

NewList bullet.bullet_struc()
#rechts = 1
#links = -1

playerrichtung = #rechts

InitSprite() And InitKeyboard()  And InitMouse()

PlayerX = 20
PlayerY = 600

OpenScreen(1024,768,32,"WW2-NS")

; GRAPHICS
LoadSprite(1,"gfx/soldat.bmp")
LoadSprite(2,"gfx/bullet.bmp")

Repeat
  
  ClearScreen(144,0,144)
  
  ForEach bullet()
    bullet()\pos_x = bullet()\pos_x + bullet()\speed_x
    bullet()\pos_y = bullet()\pos_y + bullet()\speed_y
    DisplaySprite(bullet()\graphic, bullet()\pos_x, bullet()\pos_y)
    If bullet()\pos_y <= 0
      DeleteElement(bullet())
    EndIf
  Next bullet()
  
  DisplaySprite(1, PlayerX,PlayerY)
  
  FlipBuffers()
  
  If KeyboardPushed(#PB_Key_D)
    PlayerX + 6
    playerrichtung = #rechts
  EndIf
  
  If KeyboardPushed(#PB_Key_A)
    PlayerX - 6
    playerrichtung = #links
  EndIf
  
  
  If MouseButton(1)
    If space = 0
      space = 1
      AddElement(bullet())
      bullet()\pos_x = PlayerX
      bullet()\pos_y = PlayerY
      bullet()\speed_y = 0
      bullet()\speed_x = 20 * playerrichtung
      bullet()\graphic = 2
    EndIf
  Else
    space = 0
  EndIf
  
  ExamineKeyboard()
  ExamineMouse()
  
Until MouseButton(2) 
Dann schießt der Typ immer in die Richtung, in welche er zuletzt geschaut hat. Gehst du also nach rechts und schießt dann, fliegen die Schüsse nach rechts. Gehst du nach links und schießt, fliegen die Schüsse nach links. Ist natürlich nur so ein Gedanken von mir, kann sein dass es garnicht zu dem Spiel passt welches du machen willst. ;)

Verfasst: 21.11.2004 13:13
von Xsoft
Danke Sunny, ist sogar noch viel besser, aber da wär noch ne Frage. Ich will das das Sprite ("Soldat-links.bmp") dann angezeigt wird wenn der nach links guckt !

Ich finde irgendwie keine Lösung das hinzukriegen!

Kannst du mir da auch noch helfen?

Vielen Dank!

MfG

Verfasst: 21.11.2004 13:23
von Ynnus

Code: Alles auswählen


LoadSprite(1,"gfx/soldat.bmp")
LoadSprite(2,"gfx/bullet.bmp")
LoadSprite(3,"gfx/soldat-links.bmp")

;---

if playerrichtung = #rechts
  DisplaySprite(1, PlayerX,PlayerY) 
elseif playerrichtung = #links
  DisplaySprite(3, PlayerX,PlayerY) 
endif
So sollte es gehen. Ach, wichtig, vor Beginn solltest du die Richtung festlegen, in welche der Soldat gerade schaut. Sonst wird erstmal kein Sprite angezeigt bis du einmalig den Soldaten bewegst. Also mach zum Anfang vor der Hauptschleife noch ein "playerrichtung = #rechts" rein. ;)

Verfasst: 21.11.2004 13:53
von Xsoft
Hi Sunny,

nochmal vielen Dank ! Es klappt !


MfG

Verfasst: 21.11.2004 14:49
von Rings
Ein aussagekräftiger Topic wäre wichtiger gewesen !