[Beispiele] Sternenfeldscroller
Verfasst: 29.05.2009 09:48
Kann das jemand auf Linux und MacOS testen?
Habe weder das eine noch das andere am laufen!
Unter Windows funktionierts
Edit: was mich wundert ist warum plot nur funktioniert, wenn die InitSprite() verwendet wird???
Was haben gezeichnete Punkte mit Sprites zu tun?
Habe weder das eine noch das andere am laufen!
Unter Windows funktionierts

Edit: was mich wundert ist warum plot nur funktioniert, wenn die InitSprite() verwendet wird???
Was haben gezeichnete Punkte mit Sprites zu tun?
Code: Alles auswählen
EnableExplicit
;-- CONFIGURATION
#screenwidth = 400
#screenheigth = 400
#starfieldcount = 400 ; how many stars
#starfielddepth = 4 ; in how many layers should be drawn!
;-- INIT STUFF
If InitSprite() = 0
MessageRequester("Error","Sprite Engine!")
End
EndIf
If InitKeyboard() = 0
MessageRequester("Error","Keyboard Error!")
End
EndIf
If OpenWindow(0,0,0,#screenwidth,#screenheigth,"Starfield Scroller - press esc to quit! - left/right for movement!", #PB_Window_ScreenCentered) = 0
MessageRequester("Error","Window Error!")
End
EndIf
If OpenWindowedScreen(WindowID(0),0,0,#screenwidth,#screenheigth,0,0,0) = 0
MessageRequester("Error","Screen Error!")
End
EndIf
;-- STARFIELD MVC
;-- Model
Structure Star
xpos.i
ypos.i
zpos.i
EndStructure
Global Dim starfield.Star(#starfieldcount)
Define.i i
For i = 0 To #starfieldcount - 1
starfield(i)\xpos = Random(#screenwidth-1)
starfield(i)\ypos = Random(#screenheigth-1)
starfield(i)\zpos = Random(#starfielddepth-1) + 1
Next
;-- Controller
Procedure starfieldmovedown()
Define.i i
For i = 0 To #starfieldcount - 1
If starfield(i)\ypos < #screenheigth - starfield(i)\zpos
starfield(i)\ypos = starfield(i)\ypos + starfield(i)\zpos
Else
starfield(i)\ypos = 0
EndIf
Next
EndProcedure
Procedure starfieldmoveright()
Define.i i
For i = 0 To #starfieldcount - 1
If starfield(i)\xpos < #screenwidth - starfield(i)\zpos
starfield(i)\xpos = starfield(i)\xpos + starfield(i)\zpos
Else
starfield(i)\xpos = 0
EndIf
Next
EndProcedure
Procedure starfieldmoveleft()
Define.i i
For i = 0 To #starfieldcount - 1
If starfield(i)\xpos > starfield(i)\zpos
starfield(i)\xpos = starfield(i)\xpos - starfield(i)\zpos
Else
starfield(i)\xpos = #screenwidth - starfield(i)\zpos
EndIf
Next
EndProcedure
Procedure starfieldupdate()
starfieldmovedown()
If KeyboardPushed(#PB_Key_Left)
starfieldmoveright()
EndIf
If KeyboardPushed(#PB_Key_Right)
starfieldmoveleft()
EndIf
EndProcedure
;-- View
Procedure starfielddraw()
Define.i i,plotx,ploty
StartDrawing(ScreenOutput())
For i = 0 To #starfieldcount - 1
plotx.i = starfield(i)\xpos
ploty.i = starfield(i)\ypos
Plot(plotx,ploty,RGB(255,255,255))
Next
StopDrawing()
EndProcedure
;-- Mainloop
Repeat
; Window Events have to be handled..
Define.i event
Repeat
event=WindowEvent()
Until event=0
; Keyboard also, once per loop
ExamineKeyboard()
FlipBuffers()
ClearScreen(RGB(0,0,0))
starfieldupdate()
starfielddraw()
; Give OS a chance to do something...
Delay(1)
Until KeyboardPushed(#PB_Key_Escape)