Seite 1 von 2

warum wird das sprite nicht angezeigt

Verfasst: 11.08.2006 17:00
von Ghost
Hi

hab schon wieder ein Problem.
Wenn ich das Programm starte müsste er eigentlich ein Sprite anzeigen aber das macht er nicht.

Code: Alles auswählen

InitSprite()
InitKeyboard()
InitMouse()
InitSprite3D()                                    


Global pi.f
Global a
a=0

pi=3.14159265 

#SPEED = 20 
#PI = 3.14159265


 OpenScreen(1024, 768, 32, "Test") 




 LoadSprite(1,"F:\(der Pfad)\SchiffI.bmp",#PB_Sprite_Texture)

 
SetFrameRate(30)


;############################Struckturen und Prozeduren



Structure Player
x.f
y.f
Neigung.f
Bild.f

Antrieblinks.f
Antriebrechts.f
Gewicht.f

Schild.f
Rumpf.f
Energie.f

Ship.f

WaffeI.f
WaffeII.f
WaffeIII.f
WaffeIV.f
WaffeV.f

RocketI.f
RocketII.f

EndStructure 
NewList  Player.Player()
    
    
  Procedure AddPlayer()
AddElement (Player())
Player()\x=x
Player()\y=y
Player()\Neigung=Neigung
Player()\Bild=Bild

Player()\Antrieblinks=Antrieblinks
Player()\Antriebrechts=Antriebrechts
Player()\Gewicht=Gewicht

Player()\Schild=Schild
Player()\Rumpf=Rumpf
Player()\Energie=Energie
Player()\Ship=Ship

Player()\WaffeI=WaffeI
Player()\WaffeII=WaffeII
Player()\WaffeIII=WaffeIII
Player()\WaffeIV=WaffeIV
Player()\WaffeV=WaffeV

Player()\RocketI=RocketI
Player()\RocketII=RocketII
EndProcedure 




Repeat 
  ExamineKeyboard() 
  ExamineMouse() 
  
 ClearScreen(0, 0, 0)

   CreateSprite3D(1, 1) 

      
If a = 0
   ResetList(Player()) 
While NextElement(Player()) 

 AddPlayer()
 Player()\x = 500
 Player()\y = 500
 Player()\Neigung=0

a+1

  Wend 
  EndIf 
;#######################################STEUERUNG


If KeyboardPushed(#PB_Key_Escape) 
 Quit = 1 
EndIf


ResetList(Player()) 
While NextElement(Player()) 

If KeyboardPushed(#PB_Key_Left)
  Player()\Neigung - 1*#speed
EndIf  

If KeyboardPushed(#PB_Key_right)
  Player()\Neigung+ 1*#speed
EndIf

If KeyboardPushed(#pb_key_up) 
 player()\x + Cos(Player()\Neigung*2*pi/360)*#Speed ; Bewegung 
 player()\y + Sin(Player()\Neigung*2*pi/360)*#Speed ; Bewegung 
EndIf 

If KeyboardPushed(#pb_key_down) 
  player()\x - Cos(Player()\Neigung*2*pi/360)*#Speed ; Bewegung 
  player()\y - Sin(Player()\Neigung*2*pi/360)*#Speed ; Bewegung 
EndIf 
  


;###############################################

  
  
  
  ResetList(Player()) 
While NextElement(Player()) 
 If Player()\Neigung  >360:Player()\Neigung = 0 :EndIf 
 If Player()\Neigung  <0:Player()\Neigung =360 : EndIf
Wend 


 ResetList(Player()) 
While NextElement(Player()) 
 Start3D()  
   RotateSprite3D(1, Player()\Neigung, 0)
    DisplaySprite3D(1,Player()\x ,Player()\y , 255) 
 Stop3D()
Wend 

 
    FlipBuffers()  
Until Quit = 1 


Weis jemand wieso das so ist?

Verfasst: 11.08.2006 17:33
von Kaeru Gaman
wo ist dein WEND für die tastatur-schleife?

mal abgesehen davon, dass das doch unfug ist, oder? willst mehrere player mit den selben tasten steuern?

Verfasst: 11.08.2006 18:05
von Ghost
also wegen den Wend ... hab den Code nochmal gekürtzt(alles was net mit den Player zu tun hatt rausgeschnitten)bevor ich ihn reingesetzt habe ... da muss das wend mit rein gerutscht sein


eigentlich will ich nur einen Steuern aber ich dachte es wäre ein wenig übersichtliger wenn ich dafür eine Strucktur nehme würde ...
könnte aber das Problem sein (ist erst aufgetreten als ich die Struckture gemacht habe) ... aber eigentlich müsste es doch trodzdem funktionieren oder?

Verfasst: 11.08.2006 18:15
von Kaeru Gaman
nuja, wenn du nur nen player machen wolltest, dann brauchst du keine liste.
du kannst eine strukturierte Var auch einzeln machen:

Code: Alles auswählen

Player1.Player
und keine liste, wenn du eh nur ein element benutzen willst.


> hab den Code nochmal gekürtzt bevor ich ihn reingesetzt habe ...
nuja, wenn der fehler woanders sitzt....


sorry, ich seh hier so weit halt erstmal nix, woran es liegen könnte...

Verfasst: 11.08.2006 18:41
von #NULL
kann es sein, dass deine player-liste schlichtweg leer ist? denn AddElement(Player()) führst du in diesem code nur innerhalb von deiner procedure AddPlayer() aus und diese wird aufgerufen nach einem While NextElement(Player())

Verfasst: 11.08.2006 20:12
von Kaeru Gaman
stimmt.. argl.. so ein mist, das hätt ich doch auch sehen müssen

Verfasst: 12.08.2006 10:09
von Ghost
dann müsste ich doch tehoretisch nur While NextElement(Player()) rausnehmen oder?
also nur

Code: Alles auswählen


  ResetList(Player()) 
 AddPlayer() 
 Player()\x = 500 
 Player()\y = 500 
 Player()\Neigung=0 

falls ja klapt leider auch nicht ...

aber ich werd es nochmal umschreiben weil Kaeru Gaman recht hatt eigentlich reichen einzele Variablen

Aber würde trodzdem gerne wissen wie das mit einer Struckture funkstioniert

Verfasst: 12.08.2006 10:52
von roherter
So wie ich das sehe bzw. wie es in der Hilfe steht musst du bevor du ein Sprite3d anzeigen kannst erstmal eins mit Createsprite3d erstellen.
Also sprite Laden

Dann aus dem Sprite ein 3dSprite machen :freak:

Verfasst: 12.08.2006 11:27
von #NULL
nein, das macht er ja - unnötigerweise aber in jedem frame, statt vor der hauptschleife: soweit ich weiß, reicht es wenn du das CreateSprite3D(...) nur einmal vor dem repeat... ausführst.

diesen code wiederum versteh' ich überhaupt nicht

Code: Alles auswählen

If a = 0
   ResetList(Player())
While NextElement(Player())

 AddPlayer()
 Player()\x = 500
 Player()\y = 500
 Player()\Neigung=0

a+1

  Wend
  EndIf 
wenn du einfach erstmal was sehen willst <) kannst du jenen code ja mal auskommentieren/entfernen und dafür vor dem repeat dein(e) player erstellen:

Code: Alles auswählen

;...
;...
CreateSprite3D(1, 1)

AddPlayer()
Player()\x = 500
Player()\y = 500
Player()\Neigung=0

AddPlayer()
Player()\x = 200
Player()\y = 200
Player()\Neigung=40

Repeat
  ExamineKeyboard()
  ExamineMouse()
  ClearScreen(0, 0,0)
  ;#######################################STEUERUNG
  ;...
  ;...
  Wend ; <<<<<<<<<<<<<< und wie Kaeru Gaman schon sagte, auch das Wend sicherstellen
  ;###############################################
  ;...

Verfasst: 12.08.2006 12:04
von Ghost
ok so funktioniert es :D

Code: Alles auswählen


 AddPlayer()
 Player()\x = 500
 Player()\y = 500
 Player()\Neigung=0
 

Repeat 
  ExamineKeyboard() 
  ExamineMouse() 
  
 ClearScreen(0, 0, 0)





   CreateSprite3D(1, 1) 
      CreateSprite3D(2, 2)
      

;###############################################

If KeyboardPushed(#PB_Key_Escape) 
 Quit = 1 
EndIf



   ResetList(Player()) 
While NextElement(Player()) 
Start3D()
 RotateSprite3D(1, Player()\Neigung, 0)
 DisplaySprite3D(1,Player()\x ,Player()\y , 255) 

Stop3D()
 Wend 

 
    FlipBuffers()  
Until Quit = 1 
... also müste die Steuerung schuld sein
Edit
nein doch net funkst auch mit Steuerung

ok weis jetzt wodrann es lag einmal wie ihr gesagt habt an den while NetElemt beim Plaer
und dann hatte ich noch

Code: Alles auswählen


 ResetList(shoot())
While NextElement(Shoot())
   ResetList(Player()) 
While NextElement(Player()) 
Start3D()

 RotateSprite3D(2, Shoot()\al, 0)
 DisplaySprite3D(2,Shoot()\x,Shoot()\y , Shoot()\Zustand) 

 RotateSprite3D(1, Player()\Neigung, 0)
 DisplaySprite3D(1,Player()\x ,Player()\y , 255) 

Stop3D()
 Wend 
Wend
 
musste Shoot noch rausnehmen


Danke für die Hilfe :D