Flipped Sprites?

Monkey Forums/Monkey Programming/Flipped Sprites?

zoqfotpik(Posted 2013) [#1]
I recall a while back that DrawImageRect does not support sprite flipping by setting x or y scale to -1.

Is this still the case or is there a way to do it now? Is it possible to do with matrix transforms and if so how?


therevills(Posted 2013) [#2]
Works fine here... And according to the Monkey docs:
The image is drawn using the current color, alpha, blend mode and matrix, and is clipped to the current scissor rectangle.


Import mojo

Class MyApp Extends App
	Field items:Image
	
	Method OnCreate()
		items = LoadImage("items.png", 1, Image.MidHandle)
		SetUpdateRate 60
	End
	
	Method OnUpdate()
	End
	
	Method OnRender()
		Cls 128,0,255
		DrawImage items, 10, 10
		Scale -1,1
		DrawImageRect items, 200, 100, 0, 0, 200, 200
		Scale 1,1
	End
End

Function Main()
	New MyApp
End



zoqfotpik(Posted 2013) [#3]
I see, when I tested it I was putting the scale into the drawimagerect call.

Thanks!


therevills(Posted 2013) [#4]
I actually prefer to use GrabImage:

Import mojo

Class MyApp Extends App
	Field items:Image
	Field axe:Image

	Method OnCreate()
		items = LoadImage("items.png", 1, Image.MidHandle)
		axe = items.GrabImage(0, 0, 200, 200)
		SetUpdateRate 60
	End
	
	Method OnUpdate()
	End
	
	Method OnRender()
		Cls 128,0,255
		DrawImage axe, 200, 100, 0, -1, 1
	End
End

Function Main()
	New MyApp
End



zoqfotpik(Posted 2013) [#5]
Unfortunately, when I attempt to draw it flipped, no sprite is drawn.

Notice that for testing purposes both cases for facing are set to -1 to enforce the flipped draw.

Function DrawStripTile:Void(strip:Image, num:Int, x:Int, y:Int, facing:Int)
	If facing = 1 
		Scale -1, 1
		DrawImageRect(strip, x, y, num*TILESIZE, 0, TILESIZE, TILESIZE, 0, 1, 1)
	Else
		Scale -1,1
		DrawImageRect(strip, x, y, num*TILESIZE, 0, TILESIZE, TILESIZE, 0, 1, 1)
	endif
End Function



zoqfotpik(Posted 2013) [#6]
What is the functional difference between the grabimage method and the drawimagerect method?

At this point it wouldn't cause me much trouble to switch and setting up a table of different named images would make things like animation easier later.


zoqfotpik(Posted 2013) [#7]
I see what I was doing wrong. The scale in the drawimagerect was overwriting the Scale command.


therevills(Posted 2013) [#8]
What is the functional difference between the grabimage method and the drawimagerect method?

Not much from what I can see, apart from that you actually store the image into another variable which does make it a lot easier to use.


Gerry Quinn(Posted 2013) [#9]
I mostly use GrabImage when I want to set the handle to Image.MidHandle.

If the handle will be at the top left, DrawImageRect is just as easy.


dragon(Posted 2013) [#10]
i thought first that GrabImage copy imagebuffer, but it create a simple reference to image...

Interesting, when i discard image,
it happen nothing to this reference...
that is fine!


zoqfotpik(Posted 2013) [#11]
So revill's method creates an index into the sprite sheet and doesn't experience slowdown from sprite flipping?