Here another screen dissolve method. I saw this one in a Zelda game.
Import mojo Class map Field tilewidth:Int,tileheight:Int Field mapwidth:Int,mapheight:Int Field wmwidth:Int,wmheight:Int Field map:Int[][] Field wipemap:Int[][] Field wipeactive:Bool=False Field wipemode:String Field sradius:Int Method New(mapwidth:Int,mapheight:Int,tilewidth:Int,tileheight:Int) Self.tilewidth = tilewidth Self.tileheight = tileheight Self.mapwidth = mapwidth Self.mapheight = mapheight wmwidth=640/6+6 wmheight=480/6+6 map = New Int[mapwidth][] For Local i = 0 Until mapwidth map[i] = New Int[mapheight] Next For Local y=0 Until mapheight For Local x=0 Until mapwidth setmap(x,y,Rnd(0,5)) Next Next wipemap = New Int[wmwidth][] For Local i=0 Until wmwidth wipemap[i] = New Int[wmheight] Next End Method Method update() If wipemode="wipein" mapcircle((wmwidth)/2,(wmheight)/2,sradius,0) sradius+=1 If sradius>wmheight Then wipemode="wipedone" End If If wipemode="wipeout" For Local y1=0 Until wmheight For Local x1=0 Until wmwidth wipemap[x1][y1] = 1 Next Next sradius-=1 mapcircle((wmwidth)/2,(wmheight)/2,sradius,0) If sradius < 0 Then wipemode="nothing" End If End Method Method initwipein() For Local y1=0 Until wmheight For Local x1=0 Until wmwidth wipemap[x1][y1] = 1 Next Next wipemode="wipein" sradius=0 End Method Method initwipeout() sradius=wmheight wipemode="wipeout" End Method Method setmap:Void(x:Int,y:Int,val:Int) If x>=0 And y>=0 And x<mapwidth And y<mapheight map[x][y] = val End If End Method Method drawmap:Void() If wipemode<>"nothing" For Local y1=0 Until mapheight For Local x1=0 Until mapwidth drawtile(map[x1][y1],x1*tilewidth,y1*tileheight) Next Next End If If wipemode="wipein" SetColor 0,0,0 For Local y1=0 Until wmheight For Local x1=0 Until wmwidth If wipemap[x1][y1] = 1 DrawRect x1*6,y1*6,6,6 End If Next Next End If If wipemode="wipeout" SetColor 0,0,0 For Local y1=0 Until wmheight For Local x1=0 Until wmwidth If wipemap[x1][y1] = 1 DrawRect x1*6,y1*6,6,6 End If Next Next End If End Method Method mapcircle(x1:Int,y1:Int,radius:Int,val:Int) For Local y2=-radius Until radius For Local x2=-radius Until radius If (y2*y2+x2*x2) <= radius*radius+radius*0.8 Local x3:Int = x1+x2 Local y3:Int = y1+y2 If x3>=0 And y3>=0 And x3<wmwidth And y3<wmheight wipemap[x3][y3] = val End If End If Next Next End Method Method drawtile(val:Int,x1:Int,y1:Int) Select val Case 0'water SetColor 0,0,255 DrawRect x1,y1,tilewidth,tileheight Case 1'land SetColor 0,200,0 DrawRect x1,y1,tilewidth,tileheight Case 2'forrest drawtile(1,x1,y1) SetColor 0,255,0 DrawOval x1+5,y1+5,tilewidth-10,tileheight/2 SetColor 150,10,0 DrawRect x1+12,y1+tileheight-10,tilewidth-24,tileheight/2-5 Case 3'hill drawtile(1,x1,y1) SetColor 0,255,0 DrawOval x1+5,y1+10,tilewidth-10,tileheight-15 SetColor 0,200,0 DrawRect x1,y1+tileheight/1.5,tilewidth,10 Case 4'mountain drawtile(1,x1,y1) SetColor 200,200,200 DrawPoly( [Float(x1+tilewidth/2),Float(y1), Float(x1+tilewidth-5),Float(y1+tileheight-5), Float(x1+5),Float(y1+tileheight-5)]) End Select End Method End Class Global mymap:map = New map(20,14,32,32) Global cnt:Int Class MyGame Extends App Method OnCreate() SetUpdateRate(60) mymap.initwipein End Method Method OnUpdate() mymap.update If Rnd(500)<2 And mymap.wipemode="wipedone" mymap.initwipeout End If If mymap.wipemode="nothing" cnt+=1 If cnt>100 Then mymap.initwipein cnt=0 End If End If End Method Method OnRender() Cls 0,0,0 mymap.drawmap SetColor 255,255,255 DrawText "Screen wipe example (circle) wipemode "+mymap.wipemode,0,0 End Method End Class Function Main() New MyGame() End Function
No comments:
Post a Comment
Note: Only a member of this blog may post a comment.