Muinoin tekemäni kirjasto juuri tuohon tarkoitukseen(SPuntte:la on samanlainen kirjasto myös olemassa.
Code: Select all
Type Sprites
Field Sprite_Rot As Short
Field Sprite_Images As Integer
Field Sprite_Width As Integer
Field Sprite_Height As Integer
EndType
Function LoadSprite(f$, rotation = 72, maskr = 0, maskg = 0, maskb = 0)
AngStep = 360 / rotation
Tmp = LoadImage(f$)
MaskImage Tmp,maskr,maskg,maskb
Sprite.Sprites = New(Sprites)
Sprite\Sprite_Rot = rotation
Sprite\Sprite_Images = MakeMEMBlock((rotation+1)*4)
Sprite\Sprite_Width = ImageWidth(tmp)
Sprite\Sprite_Height = ImageHeight(tmp)
For i = 0 To rotation
IMG = CloneImage(TMP)
HotSpot IMG, 320, 240
RotateImage IMG,-i*Angstep
PokeInt Sprite\Sprite_Images, i*4, IMG
Next i
Return ConvertToInteger(Sprite)
EndFunction
Function CreateSprite(tmp, rotation = 72, maskr = 0, maskg = 0, maskb = 0)
Sprite.Sprites = New(Sprites)
Sprite\Sprite_Rot = rotation
Sprite\Sprite_Images = MakeMEMBlock((rotation+1)*4)
Sprite\Sprite_Width = ImageWidth(tmp)
Sprite\Sprite_Height = ImageHeight(tmp)
For i = 0 To rotation
IMG = CloneImage(TMP)
MaskImage IMG, maskr, maskg, maskb
HotSpot IMG, 320, 240
RotateImage IMG,-i*Angstep
PokeInt Sprite\Sprite_Images, i*4, IMG
Next i
Return ConvertToInteger(Sprite)
EndFunction
Function LoadAnimSprite(f$, w,h, start, frames, rotation = 72, maskr = 0, maskg = 0, maskb = 0)
AngStep = 360 / rotation
Tmp = LoadAnimImage(f$,w,h, start, frames)
MaskImage Tmp,maskr,maskg,maskb
Sprite.Sprites = New(Sprites)
Sprite\Sprite_Rot = rotation
Sprite\Sprite_Images = MakeMEMBlock((rotation+1)*4)
Sprite\Sprite_Width = ImageWidth(tmp)
Sprite\Sprite_Height = ImageHeight(tmp)
For i = 0 To rotation
IMG = CloneImage(TMP)
RotateImage IMG,-i*Angstep
PokeInt Sprite\Sprite_Images, i*4, IMG
Next i
Return ConvertToInteger(Sprite)
EndFunction
Function DrawSprite(handle,x,y,angle#,frame=0)
angle = WrapAngle(angle)
Sprite.Sprites = ConvertToType(handle)
kulma = Int((Float(Sprite\Sprite_Rot) / 360) * Float(angle))
kuvahandle = PeekInt(Sprite\Sprite_Images, kulma * 4)
DrawImage kuvahandle, x, y, frame
EndFunction
//Tässä funktiossa oli jotain vikaa muistaakseni.
Function DrawSpriteBetween(handle, x, y, x2, y2, style, frame=0)
angle = GetAngle(x, y, x2, y2)
Sprite.Sprites = ConvertToType(handle)
kulma = Int((Float(Sprite\Sprite_Rot) / 360) * Float(angle))
kuvahandle = PeekInt(Sprite\Sprite_Images, kulma * 4)
If style <> 1 Then
dpoint = Sqrt((x2 - x)^2 + (y2 - y)^2)
DrawImage kuvahandle, x + Cos(angle) * dpoint/2, y - Sin(angle) * dpoint/2, frame
Else
dpoint = ImageWidth(GetSpriteImg(kuvahandle, angle))
DrawImage kuvahandle, x + Cos(angle) * dpoint/2, y - Sin(angle) * dpoint/2, frame
EndIf
EndFunction
Function GetSpriteImg(handle,angle#)
angle = WrapAngle(angle)
Sprite.Sprites = ConvertToType(handle)
angle = Int((Float(Sprite\Sprite_Rot) / 360) * Float(angle))
kuvahandle = PeekInt(Sprite\Sprite_Images, Int(angle) * 4)
Return kuvahandle
EndFunction
Function GetSpriteWidth(sprite_)
Sprite.Sprites = ConvertToType(sprite_)
Return Sprite\Sprite_Width
EndFunction
Function GetSpriteHeight(sprite_)
Sprite.Sprites = ConvertToType(sprite_)
Return Sprite\Sprite_Height
EndFunction
Function DeleteSprite(sprite_)
Sprite.Sprites = ConvertToType(sprite_)
DeleteMEMBlock Sprite\Sprite_Images
Delete Sprite
EndFunction