Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Sprite = {}
- function Sprite:new(x, y, image, nFramePerLine, nLine)
- local t = {}
- t.x, t.y = x, y
- t.image = image
- t.curFrame = 1
- t.timer = Timer.create()
- t.w = math.floor(image:width() / nFramePerLine)
- t.h = math.floor(image:height() / nLine)
- t.isMoving = false
- t.positions = {}
- local k = 1
- for i = 1, nLine do
- for j = 1, nFramePerLine do
- t.positions[k] = {}
- t.positions[k].x = (j - 1) * t.w
- t.positions[k].y = (i - 1) * t.h
- k = k + 1
- end
- end
- t.nFrames = k - 1
- t.__index = Sprite
- setmetatable(t, Sprite)
- return t
- end
- function Sprite:move(Time, avX, avY, startFrame, lastFrame, loop)
- if not self.isMoving then
- self.isMoving = true
- self.avX = avX or 0
- self.avY = avY or 0
- self.time = Time * 1000 or 750
- self.curFrame = startFrame or 1
- self.startFrame = self.curFrame
- self.lastFrame = lastFrame or self.nFrames
- self.loop = loop or false
- self.timer:start()
- end
- end
- function Sprite:update(val)
- if self.isMoving and val == true then
- if self.timer:getTime() > self.time / self.nFrames then
- self.curFrame = (self.curFrame == self.lastFrame) and self.startFrame or (self.lastFrame > self.startFrame) and self.curFrame + 1 or self.curFrame - 1
- self.x = self.x + self.avX / (self.lastFrame - self.startFrame + 1)
- self.y = self.y + self.avY / (self.lastFrame - self.startFrame + 1)
- if self.curFrame == self.startFrame and not self.loop then
- self.isMoving = false
- self.time = nil
- self.avX = nil
- self.avY = nil
- self.startFrame = nil
- self.lastFrame = nil
- self.loop = nil
- self.timer:stop()
- self.timer:reset()
- else
- self.timer:reset()
- self.timer:start()
- end
- end
- else
- self.isMoving = false
- self.time = nil
- self.avX = nil
- self.avY = nil
- self.startFrame = nil
- self.lastFrame = nil
- self.loop = nil
- self.timer:stop()
- self.timer:reset()
- return false
- end
- g2d.BeginRects(self.image)
- g2d.SetCoordMode(g2d.UP_LEFT)
- g2d.SetCoordXY(self.x, self.y)
- g2d.SetCropXY(self.positions[self.curFrame].x, self.positions[self.curFrame].y)
- g2d.SetCropWH(self.w, self.h)
- g2d.SetScaleWH(self.w, self.h)
- g2d.Add()
- g2d.End()
- end
- function Sprite:delete()
- for _, v in pairs(self) do v = nil end
- end
- --[[Utility.message("XtreamLua Player: Sprites Sample\n By FlavR.")
- sprite = Sprite:new(100,100, g2d.TexLoad("Hippo.jpg", g2d.SWIZZLE), 10, 5)
- while 1 do
- g2d.Clear()
- if Ctrl.read():right() then
- Sprite.move(sprite, 1000, 100, 0, 5, 35, false)
- end
- Xtream.debugPrint(0,0, "avX: "..tostring(sprite.avX) or "nil")
- Xtream.debugPrint(0,10, "avY: "..tostring(sprite.avY) or "nil")
- Xtream.debugPrint(0,20, "time: "..tostring(sprite.time) or "nil")
- Xtream.debugPrint(0,30, "x: "..tostring(sprite.x))
- Xtream.debugPrint(0,40, "y: "..tostring(sprite.y))
- Xtream.debugPrint(0,50, "timer time: "..tostring(sprite.timer:getTime()))
- Xtream.debugPrint(0,60, "curFrame: "..tostring(sprite.curFrame))
- Xtream.debugPrint(0,70, "isMoving: "..tostring(sprite.isMoving))
- Sprite.update(sprite)
- g2d.Flip(g2d.VSYNC)
- end]]
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement