BulletX fliegt HeroY immer nach

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
captain third
Beiträge: 194
Registriert: 12.12.2004 13:14
Kontaktdaten:

BulletX fliegt HeroY immer nach

Beitrag von captain third »

gutn morgn alle man

ich hab ein problem,und zwar ich wollte das wenn der Hero schiest,das die bulletX immer gradeaus fliegt,das habe ich wunderbar geschafft,nur wenn ich den hero in der y-achse bewege nach dem schuss,bewegt sich die BulletY auch das heißt,die bullet kann man mitn im flug bewegen,das ist doof,und wenn man nach dem schuss den hero in der x-achse bewegt,fängt die bullet wieder bei der startposition an....

hier der schnipsel

Code: Alles auswählen

Enumeration
 #HeroRechts
 #HeroLinks
 #Bullet 
EndEnumeration

InitSprite()
InitKeyboard()
InitMouse()
OpenScreen(800,600,16,"Test")
TransparentSpriteColor(-1,255,0,255) 
LoadSprite(#HeroRechts,"C:\WINDOWS\Desktop\Unbekanntes spiel\Soldat-rechts.bmp")
LoadSprite(#Bullet,"C:\WINDOWS\Desktop\Unbekanntes spiel\Bullet.bmp")

Menu = 1
HeroRechtsX=100
HeroRechtsY=100
BulletX=HeroRechtsX+25
BulletY=HeroRechtsY+18
Repeat
 ExamineMouse()
 ExamineKeyboard()
 ClearScreen(0,0,0)
 Select Menu
  Case 1
  DisplayTransparentSprite(#HeroRechts,HeroRechtsX,HeroRechtsY)  
  
  If KeyboardPushed(#PB_Key_Left)
   If HeroRechtsX <> 0
    HeroRechtsX - 5
    BulletX=HeroRechtsX+25
   EndIf 
  ElseIf KeyboardPushed(#PB_Key_Right)
   If HeroRechtsX <> 750
    HeroRechtsX + 5
    BulletX=HeroRechtsX+25
   EndIf
  ElseIf KeyboardPushed(#PB_Key_Down) 
   If HeroRechtsY <> 550
    HeroRechtsY + 5
    BulletY=HeroRechtsY+18
   EndIf
  ElseIf KeyboardPushed(#PB_Key_Up)
   If HeroRechtsY <> 0
    HeroRechtsY - 5
    BulletY=HeroRechtsY+18
   EndIf
  ElseIf KeyboardPushed(#PB_Key_Z)
   Bulletzahl=Bulletzahl+1
   Bullet=1
  ElseIf KeyboardPushed(#PB_Key_Escape)
   quit = 1
  EndIf
     
  If Bullet=1
   DisplaySprite(#Bullet,BulletX,BulletY)
   BulletX=BulletX+5
  EndIf   
  
  If BulletX=800
   Bullet =0
  EndIf
  
 EndSelect
 FlipBuffers()
 Until quit=1
CloseScreen()
End 
könnt ihr mir helfen?
natoll,jetzt muss ich noch einen Rechner zusammenbaun der 24 stunden am Tag online ist und meinen Server für mein Projekt Order of Blance laufen lässt
Benutzeravatar
Franky
Beiträge: 1132
Registriert: 29.08.2004 16:31
Wohnort: Münsterland
Kontaktdaten:

Beitrag von Franky »

Wie wärs denn dann, wenn du Bullety nicht immer anpasst?

Code: Alles auswählen

   If HeroRechtsY <> 0
    HeroRechtsY - 5
    BulletY=HeroRechtsY+18
   EndIf 
Wenn du mehrere Bullets schießen willst, würd ich dir sowieso ne LinkedList empfehlen
Falsch zugeordnetes Zitat des Tages: "O'zapft is" - Edward Snowden :)
Benutzeravatar
captain third
Beiträge: 194
Registriert: 12.12.2004 13:14
Kontaktdaten:

Beitrag von captain third »

danke für die antwort...des hat mich auf eine idee gebracht,ich hab das jetzt so geschrieben

Code: Alles auswählen

   If HeroRechtsY <> 0
    HeroRechtsY - 5
    If Bullet<>1
     BulletY=HeroRechtsY+18
    EndIf
   EndIf
ich kenn mich leider mit den linkedlist net aus....ich gugge ma ob ich mit der hilfe weiterkomme,wenn nicht muss hier leider weiterfragen :mrgreen:
natoll,jetzt muss ich noch einen Rechner zusammenbaun der 24 stunden am Tag online ist und meinen Server für mein Projekt Order of Blance laufen lässt
Benutzeravatar
captain third
Beiträge: 194
Registriert: 12.12.2004 13:14
Kontaktdaten:

Beitrag von captain third »

ich hab das mit der linkedlist jetzt so gemacht

Code: Alles auswählen

NewList Bullet.l() 

Enumeration
 #HeroRechts
 #HeroLinks
 #Bullet 
EndEnumeration

InitSprite()
InitKeyboard()
InitMouse()
OpenScreen(800,600,16,"Test")
TransparentSpriteColor(-1,255,0,255) 
LoadSprite(#HeroRechts,"C:\WINDOWS\Desktop\Unbekanntes spiel\Soldat-rechts.bmp")
LoadSprite(#Bullet,"C:\WINDOWS\Desktop\Unbekanntes spiel\Bullet.bmp")

Menu = 1
HeroRechtsX=100
HeroRechtsY=100
BulletX=HeroRechtsX+25
BulletY=HeroRechtsY+18
Repeat
 ExamineMouse()
 ExamineKeyboard()
 ClearScreen(0,0,0)
 Select Menu
  Case 1
  DisplayTransparentSprite(#HeroRechts,HeroRechtsX,HeroRechtsY)  
  
  If KeyboardPushed(#PB_Key_Left)
   If HeroRechtsX <> 0
    HeroRechtsX - 5
    If Bullet<>1
     BulletX=HeroRechtsX+25
    EndIf
   EndIf 
  ElseIf KeyboardPushed(#PB_Key_Right)
   If HeroRechtsX <> 750
    HeroRechtsX + 5
    If Bullet<>1
     BulletX=HeroRechtsX+25
    EndIf
   EndIf
  ElseIf KeyboardPushed(#PB_Key_Down) 
   If HeroRechtsY <> 550
    HeroRechtsY + 5
    If Bullet<>1
     BulletY=HeroRechtsY+18
    EndIf
   EndIf
  ElseIf KeyboardPushed(#PB_Key_Up)
   If HeroRechtsY <> 0
    HeroRechtsY - 5
    If Bullet<>1
     BulletY=HeroRechtsY+18
    EndIf
   EndIf
  ElseIf KeyboardPushed(#PB_Key_Z)
   AddElement(Bullet()) 
   Bullet() = Bulletzahl 

   Bullet=1
  ElseIf KeyboardPushed(#PB_Key_Escape)
   quit = 1
  EndIf
     
  If Bullet=1
   DisplaySprite(#Bullet,BulletX,BulletY)
   BulletX=BulletX+5
  EndIf   
  
  If BulletX=800
   DeleteElement(Bullet())
   Bullet =0
  EndIf
  
 EndSelect
 FlipBuffers()
 Until quit=1
CloseScreen()
End 
so jetzt mein problem...es kommt nur eine kugel....eine kugel und dann nier wieder eine kugel mehr....warum?
natoll,jetzt muss ich noch einen Rechner zusammenbaun der 24 stunden am Tag online ist und meinen Server für mein Projekt Order of Blance laufen lässt
Benutzeravatar
ChaOsKid
Beiträge: 66
Registriert: 29.08.2004 15:07
Wohnort: Oktoberfest

Beitrag von ChaOsKid »

hi captain third,

ich hab deinem code eine Structure für die Liste verpasst,
dann hab ich etwas wild rumgelöscht und ein foreach für die liste eingebaut, jetzt kann man auch alle tasten gleichzeitig drücken.
ahja und schiessen liegt jetzt auf space :)

Code: Alles auswählen

Structure BULLET
  x.l
  y.l
EndStructure

NewList Bullet.BULLET()

Enumeration
  #HeroRechts
  #HeroLinks
  #Bullet
EndEnumeration

Procedure CreateSprites()
  CreateSprite(#HeroRechts, 32, 32)
  StartDrawing(SpriteOutput(#HeroRechts))
  Box(0, 0, 32, 32, RGB(55, 55, 55))
  StopDrawing()
  CreateSprite(#Bullet, 16, 16)
  StartDrawing(SpriteOutput(#Bullet))
  Circle(7, 7, 7, RGB(80, 80, 80))
  StopDrawing()
EndProcedure

InitSprite()
InitKeyboard()
InitMouse()
OpenScreen(800,600,16,"Test")
;TransparentSpriteColor(-1,255,0,255)
CreateSprites()
;LoadSprite(#HeroRechts,"C:\WINDOWS\Desktop\Unbekanntes spiel\Soldat-rechts.bmp")
;LoadSprite(#Bullet,"C:\WINDOWS\Desktop\Unbekanntes spiel\Bullet.bmp")

Menu = 1
HeroRechtsX=100
HeroRechtsY=100
BulletX=HeroRechtsX+25
BulletY=HeroRechtsY+18
Repeat
  ExamineMouse()
  ExamineKeyboard()
  ClearScreen(0,0,0)
  Select Menu
    Case 1
      DisplayTransparentSprite(#HeroRechts,HeroRechtsX,HeroRechtsY) 
      
      If KeyboardPushed(#PB_Key_Left)
        HeroRechtsX - 5
      EndIf
      If KeyboardPushed(#PB_Key_Right)
        HeroRechtsX + 5
      EndIf
      If KeyboardPushed(#PB_Key_Down)
        HeroRechtsY + 5
      EndIf
      If KeyboardPushed(#PB_Key_Up)
        HeroRechtsY - 5
      EndIf
      If HeroRechtsX > 750
        HeroRechtsX = 750
      EndIf
      If HeroRechtsX < 0
        HeroRechtsX = 0
      EndIf
      If HeroRechtsY > 550
        HeroRechtsY = 550
      EndIf
      If HeroRechtsY < 0
        HeroRechtsY = 0
      EndIf
      If KeyboardPushed(#PB_Key_Space)
        AddElement(Bullet())
        Bullet()\x = HeroRechtsX
        Bullet()\y = HeroRechtsY
      EndIf
      
      If KeyboardPushed(#PB_Key_Escape)
        Quit = 1
      EndIf
      
      ForEach Bullet()
        DisplaySprite(#Bullet,Bullet()\x,Bullet()\y)
        Bullet()\x + 5
        If Bullet()\x>800
          DeleteElement(Bullet())
        EndIf
      Next 
      
      
  EndSelect
  FlipBuffers()
Until Quit
CloseScreen()
End
edit: hab nochmal etwas umgestellt ;)

mfG
Tobi
Antworten