Code: Select all
; Test and play yourself with it (better in PB5.7x versions)
If InitMouse()=0 Or InitSprite()=0 Or InitKeyboard()=0
MessageRequester("Error","Can't access DirectX",0):End
EndIf
RX.u=1024;GetSystemMetrics_(#SM_CXSCREEN)
RY.u=768;GetSystemMetrics_(#SM_CYSCREEN)
OpenWindow(0,0,0,RX,RY,"aac",#PB_Window_BorderLess|#PB_Window_ScreenCentered)
OpenWindowedScreen(WindowID(0),0,0,RX,RY,0,0,0,#PB_Screen_WaitSynchronization)
Macro mono(spri,vol,c1,c2,c3,c4,c5)
CreateSprite(spri#,vol#,vol#)
StartDrawing(SpriteOutput(spri#)):BackColor(0)
For t.l=vol#/2-1 To 1 Step -1:Circle(vol#/2,vol#/2,t,RGB(c1#-t*2,c2#-t*2,c3#-t*2)):Next
Line(vol#/2,0,1,vol#-1,$0):Line(0,vol#/2,vol#-1,1,$0):FillArea(vol#/2+1,vol#/2-1,0,c4#):FillArea(vol#/2-1,vol#/2+1,0,c5#)
StopDrawing()
RotateSprite(spri#,-45,#PB_Relative)
r#spri#x.u=SpriteWidth(spri#)/2:r#spri#y.u=SpriteHeight(spri#)/2;<-centro
r#spri#.u=(r#spri#x.u+r#spri#y.u)/2
m#spri#.f=4*#PI*Pow(r#spri#.u,3)/3
EndMacro
Macro marco(spri)
If p#spri#x.f<0 Or p#spri#x.f>RX:v#spri#x.f=-v#spri#x.f:EndIf
If p#spri#y.f<0 Or p#spri#y.f>RY:v#spri#y.f=-v#spri#y.f:Else:v#spri#y.f+0.1; <- gravedad (opcional)
EndIf
p#spri#x.f+v#spri#x.f:p#spri#y.f+v#spri#y.f
EndMacro
Macro inic()
p0x.f=5:p0y.f=RY/2
p1x.f=100:p1y.f=RY/2
p2x.f=435:p2y.f=RY/5
p3x.f=290:p3y.f=RY/5
v0x.f=0:v0y.f=0
v1x.f=0:v1y.f=0
v2x.f=0:v2y.f=0
v3x.f=0:v3y.f=0
EndMacro
Macro clac(o,n,C_R=1.0)
dx.f=p#o#x-p#n#x:dy.f=p#o#y-p#n#y
d.f=Sqr(dx.f*dx.f+dy.f*dy.f)
s.f=r#n#.u+r#o#.u-d.f
If s.f>0
dx.f/d.f:dy.f/d.f
mt.f=m#n#.f+m#o#.f
ds.f=s.f*m#o#.f/mt.f
p#n#x-ds.f*dx.f:p#n#y-ds.f*dy.f
ds.f=s.f-ds.f
p#o#x+ds.f*dx.f:p#o#y+ds.f*dy.f
VC.f=(dx.f*v#n#x.f+dy.f*v#n#y.f)
V.f=(dx.f*v#o#x.f+dy.f*v#o#y.f)
ur.f=C_R#*(V.f-VC.f)
di.f=(m#n#.f*VC.f+m#o#.f*V.f-m#n#.f*ur.f)/mt.f-V.f
v#o#x.f+di.f*dx.f:v#o#y.f+di.f*dy.f
di.f+ur.f+ur.f/C_R#
v#n#x.f+di.f*dx.f:v#n#y.f+di.f*dy.f
EndIf
EndMacro
mono(0,65,220,220,220,$99AAAA,$AAAAAA)
mono(1,129,200,240,240,$99BB99,$99AAAA)
mono(2,45,220,220,220,$99AAAA,$AAAAAA)
mono(3,141,200,240,240,$99BB99,$99AAAA)
inic()
Repeat
WindowEvent():ExamineKeyboard():ExamineMouse():ClearScreen(0)
If KeyboardReleased(#PB_Key_Space):v1x.f=30:v2x.f=22
ElseIf KeyboardReleased(#PB_Key_F1):inic()
EndIf
marco(0)
marco(1)
marco(2)
marco(3)
clac(3,2)
clac(1,0)
DisplayTransparentSprite(0,p0x.f-r0x.u,p0y.f-r0y.u)
DisplayTransparentSprite(1,p1x.f-r1x.u,p1y.f-r1y.u)
DisplayTransparentSprite(2,p2x.f-r2x.u,p2y.f-r2y.u)
DisplayTransparentSprite(3,p3x.f-r3x.u,p3y.f-r3y.u)
FlipBuffers():Delay(15)
Until KeyboardPushed(#PB_Key_Escape)