Artificial intelligence/templates/examples/rts/rpg/strategy ect. in MonkeyX/CerberusX language. You can download the free version of MonkeyX from itch.io or Cerberus-x.com The Flash applets will stop working in around 2020.
In the game Space Invaders there are blocks that can slowly be destroyed by the lasers. To do this in Monkey you must create a pixel array and modify the pixels inside and then create an image from the array. In this code I have created a method that draws rectangles/filled circles inside an image and the result is drawn on the screen. The image gets restored at random intervals. You can also create destructable terrain with that.
In the drawr and drawo methods there is a line that copies the sprite array inside the image. If you take that out and use this line after drawing a lot in the spriterarray the results will be faster.
Code below :
Import mojo
Global blockwidth:Int=256 Global blockheight:Int=256 Class block Field x=640/2-blockwidth/2 Field y=480/2-blockheight/2 Field image:Image Field pixels:Int[blockwidth*blockheight] Method resetimage() For Local i:Int = 0 Until blockwidth * blockheight b.pixels[i] = $FFFF0000 Next image.WritePixels(b.pixels, 0, 0, blockwidth, blockheight, 0) End Method Method drawr(x1,y1,w1,h1,col) For Local y2=y1 Until y1+h1 For Local x2=x1 Until x1+w1 Local pc = y2*blockwidth+x2 If pc >= 0 And pc < blockwidth*blockheight pixels[pc] = col End If Next Next b.image.WritePixels(b.pixels, 0, 0, blockwidth, blockheight, 0) End Method Method drawo(x1,y1,radius,col) For Local y2=-radius To radius For Local x2=-radius To radius If (y2*y2+x2*x2) <= radius*radius+radius*0.8 Local x3 = x2+x1 Local y3 = y2+y1 Local pc = y3*blockwidth+x3 If pc>=0 And pc < blockwidth*blockheight pixels[pc] = col End If End If Next Next b.image.WritePixels(b.pixels, 0, 0, blockwidth, blockheight, 0) End Method End Class Global b:block = New block Class MyGame Extends App Method OnCreate:Int() Seed = Rnd(1000) SetUpdateRate(60) b.image = CreateImage(blockwidth, blockheight) b.resetimage End Method Method OnUpdate() Select Int(Rnd(1,3)) Case 1 b.drawr Rnd(-5,blockwidth),Rnd(-5,blockheight),Rnd(5,15),Rnd(5,15),$FF000000 Case 2 b.drawo Rnd(-5,blockwidth),Rnd(-5,blockheight),Rnd(5,10),$FF000000 End Select If Int(Rnd(0,70)) = 1 Then b.resetimage End Method Method OnRender:Int() Cls DrawImage b.image, b.x,b.y SetColor 255,255,255 DrawText "Drawing in images in realtime.",0,0 End Method End Class Function Main:Int() New MyGame() End Function
Note: Only a member of this blog may post a comment.
No comments:
Post a Comment
Note: Only a member of this blog may post a comment.