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)