Packed Textures
Monkey Forums/Monkey Code/Packed Textures
| ||
| I have added support to packed textures! I'm using this texture packer from Spoonman : http://dev.ixchels.net/forum/showthread.php?t=650&highlight=texture+packer It's export a .png file and a .txt file with the patterns info. Here is the Monkey class to load and use this packed textures! I hope that is quite useful for you as it is for me! Any questions or suggestions for improvement please reply here! =) Cezar It's very easy to use, example
' Create and Load
Field PackedTexture : TPackedTexture
PackedTexture = New TPackedTexture("sprites.png","sprites.txt") ' Image name and patterns info filename
' Draw a custom pattern from Image
PackedTexture.Draw(patternname,X,Y,Angle,ScalrX,ScaleY)
Strict
Import mojo
Class TPattern
Field Name:String
Field X:Int
Field Y:Int
Field Width:Int
Field Height:Int
Method New(AName:String,AX:Int,AY:Int,AWidth:Int,AHeight:Int)
Name=AName
X=AX
Y=AY
Width=AWidth
Height=AHeight
End
End
Class TPackedTexture
Field img:Image
Field Patterns:List<TPattern>
Field Pattern:TPattern
Method New(AName:String,APatterns:String)
img=LoadImage(AName)
Patterns = New List<TPattern>
'Load Patterns from File
Local str$=LoadString(APatterns)
Local pos:Int
Local patternscount:Int
Local Pattern : TPattern
pos=0
Pattern = New TPattern()
For Local line$=Eachin str.Split( "~n" )
If pos=0 patternscount=Int(line.Trim())
If pos=1 Pattern.Name=line.Trim()
If pos=2 Pattern.X=Int(line.Trim())
If pos=3 Pattern.Y=Int(line.Trim())
If pos=4 Pattern.Width=Int(line.Trim())
If pos=5
Pattern.Height=Int(line.Trim())
Patterns.AddLast(Pattern)
Print ("Pattern " + Pattern.Name + " " + Pattern.X + " " + Pattern.Y + " " + Pattern.Width + " " + Pattern.Height)
Pattern = New TPattern()
pos=0
Endif
pos+=1
Next
End
Method FindPattern:TPattern(APatternName:String)
For Local tmpPattern:=Eachin Patterns
If tmpPattern.Name=APatternName Return tmpPattern
Next
Return Patterns.First()
End
Method Draw:Void(APatternName:String, AX:Int,AY:Int,ARotation:Float,AScaleX:Float,AScaleY:Float)
'Only change pattern if the current pattern is different than the cached one
If (Not Pattern) Or (Pattern.Name<>APatternName) Pattern=FindPattern(APatternName)
img.SetHandle( Pattern.Width/2, Pattern.Height/2)
DrawImageRect( img, AX, AY, Pattern.X, Pattern.Y, Pattern.Width, Pattern.Height, ARotation, AScaleX, AScaleY, 0 )
End
End
|
| ||
| Hi! Thanks for this, very useful. Will it work ok with animation too? Could you post an example please. |
| ||
| I have created a simple sprite class with animations support which use this packed textures! I will make an example and post it here! |
| ||
| @Wagenheimer Why dont' use Map instead of List? It should a little faster in finding the correct 'pattern' I think. You have already the KEY_NAME I'm doing a similar thing, when it's ready I'll post it. |
| ||
| Thanks! completely useful! some example could be great! |