Advertisement
Guest User

Untitled

a guest
Sep 20th, 2017
74
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 3.55 KB | None | 0 0
  1. Sprite = {}
  2.  
  3. function Sprite:new(x, y, image, nFramePerLine, nLine)
  4.     local t = {}
  5.  
  6.     t.x, t.y = x, y
  7.     t.image = image
  8.  
  9.     t.curFrame = 1
  10.     t.timer = Timer.create()
  11.  
  12.     t.w = math.floor(image:width() / nFramePerLine)
  13.     t.h = math.floor(image:height() / nLine)
  14.     t.isMoving = false
  15.  
  16.     t.positions = {}
  17.     local k = 1
  18.    
  19.     for i = 1, nLine do
  20.         for j = 1, nFramePerLine do
  21.             t.positions[k] = {}
  22.             t.positions[k].x = (j - 1) * t.w
  23.             t.positions[k].y = (i - 1) * t.h
  24.            
  25.             k = k + 1
  26.         end
  27.     end
  28.  
  29.     t.nFrames = k - 1
  30.  
  31.     t.__index = Sprite
  32.     setmetatable(t, Sprite)
  33.  
  34.     return t
  35. end
  36.  
  37. function Sprite:move(Time, avX, avY, startFrame, lastFrame, loop)
  38.     if not self.isMoving then
  39.         self.isMoving = true
  40.  
  41.         self.avX = avX or 0
  42.         self.avY = avY or 0
  43.         self.time = Time * 1000 or 750
  44.         self.curFrame = startFrame or 1
  45.         self.startFrame = self.curFrame
  46.         self.lastFrame = lastFrame or self.nFrames
  47.         self.loop = loop or false
  48.         self.timer:start()
  49.     end
  50. end
  51.  
  52. function Sprite:update(val)
  53.     if self.isMoving and val == true then
  54.         if self.timer:getTime() > self.time / self.nFrames then
  55.             self.curFrame = (self.curFrame == self.lastFrame) and self.startFrame or (self.lastFrame > self.startFrame) and self.curFrame + 1 or self.curFrame - 1
  56.  
  57.             self.x = self.x + self.avX / (self.lastFrame - self.startFrame + 1)
  58.             self.y = self.y + self.avY / (self.lastFrame - self.startFrame + 1)
  59.  
  60.             if self.curFrame == self.startFrame and not self.loop then
  61.                 self.isMoving = false
  62.                 self.time = nil
  63.                 self.avX = nil
  64.                 self.avY = nil
  65.                 self.startFrame = nil
  66.                 self.lastFrame = nil
  67.                 self.loop = nil
  68.                 self.timer:stop()
  69.                 self.timer:reset()
  70.             else
  71.                 self.timer:reset()
  72.                 self.timer:start()
  73.             end
  74.         end
  75.     else
  76.         self.isMoving = false
  77.         self.time = nil
  78.         self.avX = nil
  79.         self.avY = nil
  80.         self.startFrame = nil
  81.         self.lastFrame = nil
  82.         self.loop = nil
  83.         self.timer:stop()
  84.         self.timer:reset()
  85.         return false
  86.     end
  87.  
  88.     g2d.BeginRects(self.image)
  89.         g2d.SetCoordMode(g2d.UP_LEFT)
  90.         g2d.SetCoordXY(self.x, self.y)
  91.  
  92.         g2d.SetCropXY(self.positions[self.curFrame].x, self.positions[self.curFrame].y)
  93.         g2d.SetCropWH(self.w, self.h)
  94.         g2d.SetScaleWH(self.w, self.h)
  95.  
  96.         g2d.Add()
  97.     g2d.End()
  98. end
  99.  
  100. function Sprite:delete()
  101.     for _, v in pairs(self) do v = nil end
  102. end
  103.  
  104. --[[Utility.message("XtreamLua Player: Sprites Sample\n By FlavR.")
  105.  
  106. sprite = Sprite:new(100,100, g2d.TexLoad("Hippo.jpg", g2d.SWIZZLE), 10, 5)
  107.  
  108. while 1 do
  109. g2d.Clear()
  110.  
  111. if Ctrl.read():right() then
  112.   Sprite.move(sprite, 1000, 100, 0, 5, 35, false)
  113. end
  114.  
  115. Xtream.debugPrint(0,0, "avX: "..tostring(sprite.avX) or "nil")
  116. Xtream.debugPrint(0,10, "avY: "..tostring(sprite.avY) or "nil")
  117. Xtream.debugPrint(0,20, "time: "..tostring(sprite.time) or "nil")
  118. Xtream.debugPrint(0,30, "x: "..tostring(sprite.x))
  119. Xtream.debugPrint(0,40, "y: "..tostring(sprite.y))
  120. Xtream.debugPrint(0,50, "timer time: "..tostring(sprite.timer:getTime()))
  121. Xtream.debugPrint(0,60, "curFrame: "..tostring(sprite.curFrame))
  122. Xtream.debugPrint(0,70, "isMoving: "..tostring(sprite.isMoving))
  123.  
  124. Sprite.update(sprite)
  125.  
  126. g2d.Flip(g2d.VSYNC)
  127. end]]
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement