Seite 1 von 2

ForEach Problem

Verfasst: 18.05.2006 17:46
von Ghost
Hi
Ich habe grad an einem kleinen Weltraumshooter geschrieben aber jetzt habe ich ein Problem mit dem ForEach. Pb gibt immer eine FehlerMeldung an "ForEach() is not a function,an arrey or linked list" (wenn ich das programm starten will) aber ich habe doch

Code: Alles auswählen

NewList RoketI.RoketI()  
    
dámit ist es doch "an list" oder ?
Kann mir bitte jemand helfen?
ich stell den code mal rein

Code: Alles auswählen

InitMovie()
InitSprite()
InitKeyboard()
InitMouse()
InitSound()

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

Global PlayerX.w 
Global PlayerY.w


PlayerX = 300
PlayerY = 300

LoadSprite(0,  "F:\Dokumente und Einstellungen\???\Desktop\flayer\Bilder\player.bmp")
LoadSprite(1,"F:\Dokumente und Einstellungen\???\Desktop\flayer\Bilder\RoketI.bmp")




  Structure RoketI   
  x.l                  
  y.l
  speedX.l
  speedY.l
EndStructure

NewList RoketI.RoketI()  
                                  
Procedure AddRoketI(x, y, speedX, speedY)  ;Eine Prozedur zur Vereinfung der Weiteren Arbeit
  AddElement(RoketI())      
  RoketI()\x = x              
  RoketI()\y = y    
  RoketI()\speedX = speedX
  RoketI()\speedY = speedY 
EndProcedure

  
  
  
  
Repeat 
ExamineMouse()
 ExamineKeyboard()
 ClearScreen(0,255,0) 
  DisplayTransparentSprite(0,PlayerX,PlayerY)
 
 
 
 
 ; Steuerung
 
If KeyboardPushed(#PB_key_Left)
 PlayerX - 2
 EndIf 
If KeyboardPushed(#PB_key_Right)
PlayerX + 2
 EndIf 
If KeyboardPushed(#PB_key_up)
PlayerY - 2
 EndIf 
If KeyboardPushed(#PB_key_Down)
PlayerY + 2
 EndIf 
If KeyboardPushed (#PB_key_LeftControl)
  AddRoketI(playerX+25, playerY-3, 10, 0)   
     EndIf  
  


   ForEach(RoketI())
    If      RoketI()\x > 800   : DeleteElement(RoketI())
    ElseIf RoketI()\x < 0     : DeleteElement(RoketI())
    ElseIf RoketI()\y > 600   : DeleteElement(RoketI())
    ElseIf RoketI()\y < 0     : DeleteElement(RoketI())
    EndIf
  Next

ForEach(RoketI())
    DisplayTransparentSprite(RoketI, RoketI()\x, RoketI()\y)   
    RoketI()\x + RoketI()\speedX
    RoketI()\y + RoketI()\speedY
  Next 
Return 
    
FlipBuffers()
Until KeyboardPushed(1):End
    

Verfasst: 18.05.2006 18:22
von Kiffi
lass mal die Klammer weg.

Code: Alles auswählen

ForEach RoketI()
Grüße ... Kiffi

Verfasst: 18.05.2006 18:27
von Ghost
dann schreibt er RoketI is not a valid operator

Verfasst: 18.05.2006 18:33
von ts-soft
Welche PB Version?
Für Version 4 fehlt das Global vor NewList

Verfasst: 18.05.2006 18:38
von Kiffi
Ghost hat geschrieben:dann schreibt er RoketI is not a valid operator
also ich bekomme hier unter 3.94 keinen Fehler. (bis auf das die Bilder nicht
vorhanden sind).

Grüße ... Kiffi

Verfasst: 18.05.2006 18:38
von Ghost
Leider weiß ich net welche version ich habe (ist nirgends angegeben)
das Einzige was auf der verpackung angegeben is ist PureBasic Game Programmers Edition
auf der Seite kannst du es dir ansehen da habe ich es bestellt
http://www.amazon.de/exec/obidos/ASIN/3 ... 81-1813021

Verfasst: 18.05.2006 18:40
von Ghost
dann liegs warscheinlich doch an der Version ich versuchs mal schnell mit global vor der liste

(Edit)
dies hatt ein Syntex error zur folge

Verfasst: 18.05.2006 18:41
von ts-soft
Dann solltest Du Deine Frage vielleicht mal hier stellen:
http://www.purebasic.fr/german/viewtopic.php?t=8152

Deine Version ist 3.3

Verfasst: 18.05.2006 18:45
von Ghost
ok danke
ich stells gleich rein
(edit)
ich warte doch erstmal noch weil das éin wenig dähmlich ist so ein tehma mitten in eine Diskusion zu stellen(find ich zumindest)

Verfasst: 18.05.2006 19:00
von ts-soft
Schreib mal in Deine Signatur, das Du Version 3.3 benutzt, dann kriegste
eher die richtige Hilfe, die Unterschiede sind ja doch sehr groß!