ich krig die Kriese...
Ich find meinen Fehler einfach nicht!
Also ich helfe zurzeit einem Freund (Totalanfänger) bei seinem Ersten Spiel.
Das mit den Fischen war seine Idee, also sagt bitte nichts dazu.
Ich krig das einfach nicht hin, das die Fische in die Liste "geladen" (oder wie man dazu sagt) und dann wieder ausgelesen und angezeigt werden und von links nach rechts über den Bilschirm "schwimmen"
(Ich hab sowas schon öfter geschrieben, aber diesmal hauts einfach nicht hin.)
Bestimmt ist das Problem ganz einfach und ich sehe es wieder mal viel zu kompliziert.
Also Schaut euch den Code mal an.
Danke!
Code: Alles auswählen
;**********-Sprite, Tastatur, Maus, Sprite3D initialisieren-**********
If InitSprite() = 0
MessageRequester("Fehler (Sprite)", "Konnte DirectX nicht finden", 0)
End
EndIf
If InitSprite3D() = 0
MessageRequester("Fehler (3D)", "Konnte DirectX nicht finden", 0)
End
EndIf
If InitKeyboard() = 0
MessageRequester("Fehler (Keyboard)", "Konnte DirectX nicht finden", 0)
End
EndIf
If InitMouse() = 0
MessageRequester("Fehler (Mouse)", "Konnte DirectX nicht finden", 0)
End
EndIf
;**********-Konstanten, Variablen werte zuweisen-**********
#ScreenWidth = 800
#ScreenHeight = 600
Global FullScreen.l
Global BootPosition.l
Global BootSpeed.l
Global FischSpeed.l
BootPosition = 250
BootSpeed = 4
FischSpeed = 2
;**********-Auswahlfenster für Optionen-**********
Procedure startfenster()
If OpenWindow(0,(getsystemmetrics_(#SM_CXSCREEN)/2)-(200/2),(getsystemmetrics_(#SM_CYSCREEN)/2)-(140/2),200,140,#PB_WINDOW_SYSTEMMENU,"Wähle Bildschirmmodus")
If CreateGadgetList(WindowID())
ButtonGadget(1, 10, 10, 180, 30, "Vollbild" )
ButtonGadget(2, 10, 50, 180, 30, "Fenstermodus")
ButtonGadget(3, 10, 100, 180, 30, "Beenden" )
EndIf
Repeat
EventID.l = WaitWindowEvent()
If EventID = #PB_EventGadget
Select EventGadgetID()
Case 1
FensterSchliessen = 1
FullScreen = 1
Case 2
FensterSchliessen = 1
FullScreen = 0
Case 3
End
EndSelect
EndIf
If EventID = #PB_Event_CloseWindow
End
EndIf
Until FensterSchliessen = 1
CloseWindow(0)
EndIf
EndProcedure
;**********-Eigenschaften der Fische abspeichern (Liste)-**********
Structure F
Sp.l
X.l
Y.l
A.l
EndStructure
NewList F.F()
Procedure Newfisch(Sprite, PositionX, PositionY, Activiert)
AddElement(F())
Sp.l = Sprite ;Welches Sprite der Fisch hat
X.l = PositionX ;X-Position des Fisches
Y.l = PositionY ;Y-Position des Fisches
A.l = Activiert ;ob der Fisch mit dem Angelhaken zusammenstößt
EndProcedure
;**********-Grafiken laden-**********
Procedure loadGraphics()
LoadSprite( 1, "Grafik\Hintergrund.bmp", 0)
LoadSprite( 2, "Grafik\Boot.bmp", 0)
LoadSprite( 5, "Grafik\Angel.bmp", 0)
LoadSprite( 6, "Grafik\Haken.bmp", 0)
LoadSprite(10, "Grafik\Fisch 1.bmp", 0)
LoadSprite(11, "Grafik\Fisch 2.bmp", 0)
LoadSprite(12, "Grafik\Fisch 3.bmp", 0)
LoadSprite(13, "Grafik\Fisch 4.bmp", 0)
LoadSprite(14, "Grafik\Hai.bmp", 0)
EndProcedure
;**********-Sprites anzeigen-**********
Procedure displayGraphics()
DisplaySprite(1, 0, 0)
DisplayTransparentSprite(2, BootPosition, 350)
ResetList(F())
While NextElement(F())
DisplayTransparentSprite(F()\Sp, F()\X, F()\Y)
Wend
EndProcedure
;**********-Alle funktionen der Fische-**********
Procedure fische()
If FischDelay = 0
NewFisch(Random(4) + 10, #ScreenWidth + 150, Random(50) * 4, 0)
FischDelay = Random(20) * 50
Else
FischDelay - 1
EndIf
ResetList(NF())
While NextElement(NF())
F()\X - FischSpeed
If NF()\X > - 150
DeleteElement(NF())
EndIf
Wend
EndProcedure
;**********-überprüft, ob z.B. eine Taste gedrückt wird-**********
Procedure checkControls()
ExamineKeyboard()
ExamineMouse()
If KeyboardPushed(#PB_Key_Right)
BootPosition + BootSpeed
If BootPosition >= #ScreenWidth - SpriteWidth(2)
BootPosition = #ScreenWidth - SpriteWidth(2)
EndIf
EndIf
If KeyboardPushed(#PB_Key_Left)
BootPosition - BootSpeed
If BootPosition <= 0
BootPosition = 0
EndIf
EndIf
If KeyboardReleased(#PB_Key_Escape)
End
EndIf
EndProcedure
;**********-in dieser Schleife werden die einzellnen Proceduren (Schleifen) zusammengefügt-**********
Procedure gameloop()
displayGraphics()
fische()
checkControls()
FlipBuffers()
ClearScreen(0,0,0)
Delay(0)
EndProcedure
;Hier werden die einzellnen Proceduren aufgerufen.
startfenster()
If FullScreen = 1
If OpenScreen(#ScreenWidth, #ScreenHeight, 32, "Fischy")
loadGraphics()
Repeat
gameloop()
ForEver
EndIf
EndIf