birthday cool code.
Monkey Forums/Monkey Beginners/birthday cool code.
| ||
| Hi ! I'm searching a cool code to display some nice coloured confettis (square images) on screen (1280x720). It's for the birthday of olders persons inside our nursing home. I already display the person name at the center of the screen,an background image and play a music. Have you some idea or code example ? (i want a short code for this, not use a huge class). I'm crap with math to code this kind of nice effects ! Thanks. |
| ||
| I would write a simple particle emitter, and draw (or Google) for some confetti graphics to attach. There may be some particle code on here or in the code archives, if not you could always look at some Blitz / BlitzMax code from their archives and port it over which should be pretty simple. A quick forum search found this: http://www.monkey-x.com/Community/posts.php?topic=5255 If you have something like Spine or Spriter you could create the animation in that and then just play it on loop using the Monkey Runtimes (not sure about Spriter but the Spine module works fine in Monkey), or one of the free frameworks might have particle stuff in it (Diddy/fantomEngine) but you would have to check that as I'm not sure if they do. |
| ||
| I'm really searching a tiny code sample, easy to add without import ! i will code a simple class like single explosions. (cos, sin at random angle and speed, and at each x,y point a rotated and scaled image. Finally i code my own idea :-) Many thanks. |
| ||
| hope this helps, there's not much maths to it as it is. i haven't tested how much you can put on screen without causing problems but it seems to handle a thousand or so at once okay Import mojo
Global confettiSize:Float = 12.0
Global confettiList:List<Confetti> = New List<Confetti>
Function Main()
Local c:ConfettiApp = New ConfettiApp
End
Class ConfettiApp Extends App
Method OnCreate()
SetUpdateRate(30)
CreateConfetti(325)
End
Method OnUpdate()
If KeyHit(KEY_SPACE) Then KillConfetti()
If KeyHit(KEY_ENTER) Then CreateConfetti(325)
UpdateConfetti()
End
Method OnRender()
Cls(0, 0, 0)
RenderConfetti()
DrawText("Space Removes all confetti", 8, DeviceHeight() -48, 0, 0)
DrawText("Return throws another batch", 8, DeviceHeight() -32, 0, 0)
End
End
Function CreateConfetti(quantity:Int)
For Local i:Int = 0 Until quantity
Local c:Confetti = New Confetti()
Next
End
Function UpdateConfetti()
For Local c:Confetti = EachIn confettiList
c.Update()
Next
End
Function RenderConfetti()
For Local c:Confetti = EachIn confettiList
c.Render()
Next
End
Function KillConfetti()
confettiList.Clear()
End
Class Confetti
Field xPos:Float
Field yPos:Float
Field rColor:Int
Field gColor:Int
Field bColor:Int
Field speed:Float
Field angle:Float
Method New()
xPos = Rnd(0, DeviceWidth())
yPos = Rnd(-400, 0)
RandomConfettitColor()
speed = Rnd(5, 15)
angle = Rnd(365)
confettiList.AddLast(Self)
End
Method RandomConfettitColor()
Local f:Float = Rnd()
If f < 0.2
'PastelBlue
rColor = 193
gColor = 238
bColor = 255
ElseIf f < 0.4
'PastelPink
rColor = 255
gColor = 193
bColor = 214
ElseIf f < 0.6
'PastelGreen
rColor = 213
gColor = 254
bColor = 194
ElseIf f < 0.8
'PastelYellow
rColor = 254
gColor = 250
bColor = 194
Else
'PastelRed
rColor = 255
gColor = 193
bColor = 193
EndIf
End
Method Update()
yPos += speed
If yPos > DeviceHeight() + (2 * confettiSize)
confettiList.Remove(Self)
EndIf
angle += speed * 1.5
End
Method Render()
PushMatrix()
Translate(xPos - (confettiSize / 2), yPos - (confettiSize / 2))
Rotate(angle)
SetColor(rColor, gColor, bColor)
DrawRect(-2, -2, confettiSize - 2, confettiSize - 2)
PopMatrix()
End
End |
| ||
| Here is something I made that is short and has a party vibe to it. (fireworks/fountain) See the link to view the flash on the page running the code. http://monkeygameprogramming.blogspot.nl/2014/12/monkey-x-2d-fireworks-using-lists-code.html Here the code. It is one of the posts that had more then avarage amount of pageviews on my blog.
Import mojo
Class sprite
Field x#,incx#
Field y#,incy#
Method New()
x = DeviceWidth/2
y = DeviceHeight
incx=Rnd(1,2);If Rnd(1)>=.5 incx=-incx
incy=Rnd(-3,-15)
End Method
End Class
Class MyGame Extends App
Field spritelist:List<sprite> = New List<sprite>
Method OnCreate()
SetUpdateRate(60)
End Method
Method OnUpdate()
spritelist.AddLast(New sprite)
For Local i:=Eachin spritelist
i.x += i.incx
i.y += i.incy
i.incy += 0.1
Next
For Local i:=Eachin spritelist
If i.y > DeviceHeight Then spritelist.Remove i
Next
End Method
Method OnRender()
Local cnt:Int = 0
Cls(0,0,0)
SetColor(255,255,255)
For Local i:=Eachin spritelist
DrawCircle i.x,i.y,3
cnt+=1
Next
DrawText "Count: "+cnt,10,10
End
End
Function Main()
New MyGame()
End
|
| ||
| I've already program something with arrays. But it's interesting to read your code, especially so i can understand how to work with lists ! Many thanks for your help. |