Author Topic: raster bars + stars = freeze !  (Read 3873 times)

0 Members and 1 Guest are viewing this topic.

Offline waste

  • C= 64
  • **
  • Posts: 50
  • Karma: 2
    • View Profile
raster bars + stars = freeze !
« on: May 24, 2016 »
hi all,

i'm trying to display simulteanously raster bars and starfield with camera effects,

after 5 seconds, my app get frozen, i have already met this but i ve forgotten how to fix it !!   :clap:  debugger end unexpectedly ...

win 8.1 Enterprise 64
PB 5.31 (official)

here is my code if you hav any idea ....

Code: [Select]

;
; starfield credits unknokwn
;
; rasters credits : padman and inc. , many thanks dudes



Enumeration
#win
EndEnumeration

#scrw = 640
#scrh = 502
#centerofscrw = #scrw/2
#centerofscrh = #scrh/2


SSum.w = 5000 ; nbr of Stars


Cspeed.f=10
CameraZ.f=0

xres  = 640           ; ScreenWidth
yres  = 502           ; ScreenHeight


InitSprite()
InitKeyboard()
UsePNGImageDecoder()


Gosub InitStarField


If InitSprite() = 0 Or InitKeyboard() = 0 Or InitMouse() = 0
 MessageBox_ (0,"Can't open DirectX 7 or later", "blahhhh", #MB_ICONINFORMATION|#MB_OK)
End
EndIf

OpenWindow(#win, 0,0,640, 502, "Yep !" , #PB_Window_SystemMenu|#PB_Window_BorderLess |#PB_Window_ScreenCentered )
OpenWindowedScreen(WindowID(#win),0,0,640,502)

 

SetFrameRate(90)

 StartDrawing(ScreenOutput())
 For y = 0 To 32
   
    Box( 0, y, 640, 64 - y*2, RGB(y*6, 35, 65) )
   
 Next y
 StopDrawing()
 
 GrabSprite(1, 0, 0, 640, 64)
 
 
 
;-------- MainLoop --------
Repeat
 
ExamineKeyboard() 
ClearScreen(0)
StartDrawing(ScreenOutput())

Gosub DrawStarField
Gosub MoveCamera

StopDrawing()

DisplaySprite(1, 0, 36 + 8*Sin(r.f))           ; 36 to set it up on screen and *sin for amplitude
DisplaySprite(1, 0, 136 + 50*Sin(r + 1.57))
DisplaySprite(1, 0, 236 + 8*Sin(r + 3.14))
r+0.085


FlipBuffers()

Until KeyboardPushed(#PB_Key_Escape)
End

;--------- Procs / Subs -------------

InitStarField:

Structure _3DStar
x.f ; X-Coordinate
y.f ; Y-Coordinate
z.f ; Z-Coordinate
EndStructure


Dim Stars._3DStar(SSum)
For strtpoint = 0 To SSum
Stars(strtpoint)\x = Random(10000)-5000
Stars(strtpoint)\y = Random(10000)-5000
Stars(strtpoint)\z = 100 + Random(1000)
Next strtpoint
Return



MoveCamera:
If CameraZ>1000
  Direction=-1
ElseIf CameraZ<-1000
  Direction=1
EndIf

If Direction=1 And Cspeed<10
  Cspeed=Cspeed+0.01
ElseIf Direction=-1 And Cspeed>-10
  Cspeed=Cspeed-0.01
EndIf
CameraZ=CameraZ+Cspeed
Return


DrawStarField:
For strtpoint = 0 To SSum
If Stars(strtpoint)\z<CameraZ
  Stars(strtpoint)\z=CameraZ+1000
  ElseIf Stars(strtpoint)\z>(CameraZ+1000)
  Stars(strtpoint)\z=CameraZ
EndIf

SX = Stars(strtpoint)\x / (Stars(strtpoint)\z-CameraZ)*100+#centerofscrw
SY = Stars(strtpoint)\y / (Stars(strtpoint)\z-CameraZ)*100+#centerofscrh

If SX<#scrw And SY<#scrh And SX>0 And SY>0
  b.f = 255-(((Stars(strtpoint)\z)-CameraZ)*(255./1000.))
  c=Int(b)
  Plot ( SX, SY, RGB(c,c,c))
EndIf

Next strtpoint
Return





Offline padman

  • Senior Member
  • Pentium
  • ********
  • Posts: 990
  • Karma: 260
    • View Profile
Re: raster bars + stars = freeze !
« Reply #1 on: May 24, 2016 »
Since you are using a window simply add the following line to the main loop and the freeze should be history:

Code: [Select]
WaitWindowEvent(1)
Challenge Trophies Won:

Offline inc.

  • Contact me @ skype: a5recordings
  • Amiga 1200
  • ****
  • Posts: 276
  • Karma: 25
  • I SPEAK ENGLISH & GERMAN as good as i can :D
    • View Profile
Re: raster bars + stars = freeze !
« Reply #2 on: May 24, 2016 »
better using:
Code: [Select]
Repeat
Event = WindowEvent()
...

Code: [Select]
;
; starfield credits unknokwn
;
; rasters credits : padman and inc. , many thanks dudes



Enumeration
#win
EndEnumeration

#scrw = 640
#scrh = 502
#centerofscrw = #scrw/2
#centerofscrh = #scrh/2


SSum.w = 5000 ; nbr of Stars


Cspeed.f=10
CameraZ.f=0

xres  = 640           ; ScreenWidth
yres  = 502           ; ScreenHeight


InitSprite()
InitKeyboard()
UsePNGImageDecoder()


Gosub InitStarField


If InitSprite() = 0 Or InitKeyboard() = 0 Or InitMouse() = 0
 MessageBox_ (0,"Can't open DirectX 7 or later", "blahhhh", #MB_ICONINFORMATION|#MB_OK)
End
EndIf

OpenWindow(#win, 0,0,640, 502, "Yep !" , #PB_Window_SystemMenu|#PB_Window_BorderLess |#PB_Window_ScreenCentered )
OpenWindowedScreen(WindowID(#win),0,0,640,502)

 

SetFrameRate(90)

 StartDrawing(ScreenOutput())
 For y = 0 To 32
   
    Box( 0, y, 640, 64 - y*2, RGB(y*6, 35, 65) )
   
 Next y
 StopDrawing()
 
 GrabSprite(1, 0, 0, 640, 64)
 
 
 
;-------- MainLoop --------
Repeat
  Event = WindowEvent()
 
ExamineKeyboard() 
ClearScreen(0)
StartDrawing(ScreenOutput())

Gosub DrawStarField
Gosub MoveCamera

StopDrawing()

DisplaySprite(1, 0, 36 + 8*Sin(r.f))           ; 36 to set it up on screen and *sin for amplitude
DisplaySprite(1, 0, 136 + 50*Sin(r + 1.57))
DisplaySprite(1, 0, 236 + 8*Sin(r + 3.14))
r+0.085


FlipBuffers()
;close window if you click on"x"
Select Event
Case #PB_Event_CloseWindow
      EventWindow = EventWindow()
      If EventWindow = #win
        CloseWindow(#win)
        End
      EndIf
  EndSelect

Until KeyboardPushed(#PB_Key_Escape)
End

;--------- Procs / Subs -------------

InitStarField:

Structure _3DStar
x.f ; X-Coordinate
y.f ; Y-Coordinate
z.f ; Z-Coordinate
EndStructure


Dim Stars._3DStar(SSum)
For strtpoint = 0 To SSum
Stars(strtpoint)\x = Random(10000)-5000
Stars(strtpoint)\y = Random(10000)-5000
Stars(strtpoint)\z = 100 + Random(1000)
Next strtpoint
Return



MoveCamera:
If CameraZ>1000
  Direction=-1
ElseIf CameraZ<-1000
  Direction=1
EndIf

If Direction=1 And Cspeed<10
  Cspeed=Cspeed+0.01
ElseIf Direction=-1 And Cspeed>-10
  Cspeed=Cspeed-0.01
EndIf
CameraZ=CameraZ+Cspeed
Return


DrawStarField:
For strtpoint = 0 To SSum
If Stars(strtpoint)\z<CameraZ
  Stars(strtpoint)\z=CameraZ+1000
  ElseIf Stars(strtpoint)\z>(CameraZ+1000)
  Stars(strtpoint)\z=CameraZ
EndIf

SX = Stars(strtpoint)\x / (Stars(strtpoint)\z-CameraZ)*100+#centerofscrw
SY = Stars(strtpoint)\y / (Stars(strtpoint)\z-CameraZ)*100+#centerofscrh

If SX<#scrw And SY<#scrh And SX>0 And SY>0
  b.f = 255-(((Stars(strtpoint)\z)-CameraZ)*(255./1000.))
  c=Int(b)
  Plot ( SX, SY, RGB(c,c,c))
EndIf

Next strtpoint
Return

currently coding in PureBasic: GLSL Shader Maker & Editor Tool for further Demo coding usage

Offline waste

  • C= 64
  • **
  • Posts: 50
  • Karma: 2
    • View Profile
Re: raster bars + stars = freeze !
« Reply #3 on: May 24, 2016 »
Repeat
Event = WindowEvent() 

that' s it !!  fixed !

so let's add scrolltext and music ,