Schussrichtung in Spiel bestimmen

Fragen zu Grafik- & Soundproblemen und zur Spieleprogrammierung haben hier ihren Platz.
Benutzeravatar
Xsoft
Beiträge: 15
Registriert: 24.09.2004 18:17
Wohnort: Hessen
Kontaktdaten:

Schussrichtung in Spiel bestimmen

Beitrag 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
Windows XP Home Edition - SP1 - Pure Basic 3.93 - jaPBe
Benutzeravatar
Ynnus
Beiträge: 855
Registriert: 29.08.2004 01:37
Kontaktdaten:

Beitrag 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. ;)
Benutzeravatar
Xsoft
Beiträge: 15
Registriert: 24.09.2004 18:17
Wohnort: Hessen
Kontaktdaten:

Beitrag von Xsoft »

Sunny, du hast mir jetz schon 2 mal geholfen ! Vielen Dank ;)

MfG
Windows XP Home Edition - SP1 - Pure Basic 3.93 - jaPBe
Benutzeravatar
Ynnus
Beiträge: 855
Registriert: 29.08.2004 01:37
Kontaktdaten:

Beitrag 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. ;)
Benutzeravatar
Xsoft
Beiträge: 15
Registriert: 24.09.2004 18:17
Wohnort: Hessen
Kontaktdaten:

Beitrag 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
Windows XP Home Edition - SP1 - Pure Basic 3.93 - jaPBe
Benutzeravatar
Ynnus
Beiträge: 855
Registriert: 29.08.2004 01:37
Kontaktdaten:

Beitrag 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. ;)
Benutzeravatar
Xsoft
Beiträge: 15
Registriert: 24.09.2004 18:17
Wohnort: Hessen
Kontaktdaten:

Beitrag von Xsoft »

Hi Sunny,

nochmal vielen Dank ! Es klappt !


MfG
Windows XP Home Edition - SP1 - Pure Basic 3.93 - jaPBe
Benutzeravatar
Rings
Beiträge: 977
Registriert: 29.08.2004 08:48

Beitrag von Rings »

Ein aussagekräftiger Topic wäre wichtiger gewesen !
Rings hat geschrieben:ziert sich nich beim zitieren
Antworten