Seite 1 von 1

BulletX fliegt HeroY immer nach

Verfasst: 02.02.2005 16:59
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?

Verfasst: 02.02.2005 17:17
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

Verfasst: 02.02.2005 17:28
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:

Verfasst: 02.02.2005 17:36
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?

Verfasst: 03.02.2005 21:46
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