Шукати в цьому блозі

рух спрайта за довільним маршрутом



Синтаксис: Lua
--задаєм масив точек відрізків нашого маршруту:
pike={
        5,4,
        107,56,
        99,108,
        42,123,
        28,84,
        45,38,
        112,21,
        165,41,
        175,110,
        141,182,
        48,236,
        30,232,
        41,175,
        105,156,
        166,174,
        184,215,
        180,254,
        148,293,
        139,311,
        134,329

Синтаксис: Lua
--функція руху від точки до точки  с заданною швидкістю
function speed_move2(sprite,x2,y2,speed)



        x1, y1 = sprite:getPosition()

        local d=math.sqrt(math.abs(x1-x2)^2+math.abs(y1-y2)^2)  --довж гіпотенузи

       
        speed=(d/speed)*1000
       
       
        speed=speed/1000*60  --60fps
       

        sprite.move = MovieClip.new{
                        {1, speed, sprite, {= {x1, x2, "inBack"},= {y1, y2, "inBack"}}}  -- програти з 1 до 100кадру з рухом по осі  Х від  0 до 200
                }
        sprite.move:gotoAndPlay(1)
        sprite.move:addEventListener(Event.COMPLETE ,function()runpath(sprite) end )
end


Клас спрайта який рухається по маршруту
Синтаксис: Lua
enemy1 = Core.class(Sprite)

function enemy1:init(x,y,path,speed)
       
       
        self.frame={}
        self.frame[1] = Bitmap.new(Texture.new("controllers/enemy1/krovosisi0001.png"))
        self.frame[2] = Bitmap.new(Texture.new("controllers/enemy1/krovosisi0002.png"))
       
       
       
        self.anim = MovieClip.new{
                {1, 3, self.frame[1]},
                {4, 7, self.frame[2]}
               
        }
        self.anim:setGotoAction(7, 1)
        self.anim:gotoAndPlay(1)
        ----------------------------------------------------
       
        self:setPosition(x,y)
        self.x=x
        self.y=y
        self.path=path
        self.speed=speed
        self.step=3
        self:addChild(self.anim)
       

        stage:addChild(self)
       
        runpath(self)
       
end

function runpath(self)

       
        if self.step+1==#self.path then
                self.step=3
                self.x=self:getX()
                self.y=self:getY()
        else
                self.step=self.step+2
        end
       
       
         self.x2=self.x+self.path[self.step]-self.path[1] 
         self.y2=self.y+self.path[self.step+1]-self.path[2]
       
        speed_move2(self,self.x2,self.y2,self.speed)

end

Використання
Синтаксис: Lua
enemy1.new(100,100,pike,50)

Немає коментарів:

Дописати коментар