lua on cocos2dx 札记(三

原创 2013年12月04日 18:11:05


一个四向动画精灵类。。。


-- a_Sprite: animated sprite 
-- START
a_Sprite = class("a_Sprite",
    function(spriteFrame)
--init with texture?
        return CCSprite:createWithSpriteFrame(spriteFrame)  
    end
)
a_Sprite.__index = a_Sprite


function a_Sprite:create(...)
    
    --init private fields, in the other words, local variables corresponding to params
    local fileName, numOfFrames, numOfDirections, defaultDirection, frameDelay, spritePaused, x, y 


    for k,v in pairs({...}) do 
        
        --required params
        if v.fileName ~= nil then
            fileName = v.fileName
        else
            errBox("sprite file name is missing")            
        end
        
        if v.numOfFrames ~= nil then
            numOfFrames = v.numOfFrames
        else
            errBox("sprite number of frames is missing")
        end
        
        --optional param
        if v.numOfDirections ~= nil then
            numOfDirections = v.numOfDirections
        else
            numOfDirections = 4
        end
        
        if v.defaultDirection ~= nil then
            defaultDirection = v.defaultDirection
        else
            defaultDirection = 0
        end


        if v.frameDelay ~= nil then
            frameDelay = v.frameDelay
        else
            frameDelay = 0.3
        end


        if v.spritePaused ~= nil then
            spritePaused = v.spritePaused
        else
            spritePaused = false
        end


        if v.x ~= nil then
            x = v.x
        else
            local visibleSize = CCDirector:sharedDirector():getVisibleSize()
            local origin = CCDirector:sharedDirector():getVisibleOrigin()
            
            x = origin.x + visibleSize.width / 2
        end
        
        if v.y ~= nil then
            y = v.y
        else
            local visibleSize = CCDirector:sharedDirector():getVisibleSize()
            local origin = CCDirector:sharedDirector():getVisibleOrigin()
            
            y = origin.y + visibleSize.height / 2
        end


    end
    
    -- init public fields, could be called by object of the class
    self.numOfFrames = numOfFrames
    self.frameDelay = frameDelay
    self.isMoved = false


    local texture = CCTextureCache:sharedTextureCache():addImage(fileName)
    
    local frameWidth = texture:getContentSize().width / numOfFrames


    local frameHeight = texture:getContentSize().height / numOfDirections


    local frames = CCArray:create()
        
    for i = 1, numOfFrames do
        frames:addObject(CCSpriteFrame:createWithTexture(texture, CCRectMake((i-1) * frameWidth, defaultDirection * frameHeight, frameWidth, frameHeight)))
    end 


    local sprite = a_Sprite.new(frames:objectAtIndex(0))
    
    sprite.isPaused = spritePaused
    
    sprite:setPosition(x, y)
    
    local animation = CCAnimation:createWithSpriteFrames(frames, frameDelay)
    local animate = CCAnimate:create(animation);
    sprite:runAction(CCRepeatForever:create(animate))


    return sprite
end


function a_Sprite:setDirection(direction)
    
    local texture = self:getTexture()
    
    local frameWidth = texture:getContentSize().width / self.numOfFrames
    
    local frameHeight = texture:getContentSize().height / self.numOfFrames
    
    --debug("height: %2f, width: %2f", frameHeight, frameWidth)


    local frames = CCArray:create()
        
    for i = 1, self.numOfFrames do
        frames:addObject(CCSpriteFrame:createWithTexture(texture, CCRectMake((i-1) * frameWidth, direction * frameHeight, frameWidth, frameHeight)))
    end 


    local animation = CCAnimation:createWithSpriteFrames(frames, self.frameDelay)
    local animate = CCAnimate:create(animation);
    self:runAction(CCRepeatForever:create(animate))
end


function a_Sprite:move(direction, speed)
    --debug(direction)
    if not self.isMoved then
        return
    else
        self:setDirection(direction)
        --down
        if direction == 0 then
            self:setPosition(self:getPositionX(), self:getPositionY() - speed)


        --left
        elseif direction == 1 then
             self:setPosition(self:getPositionX() - speed, self:getPositionY())


        --up 
        elseif direction == 2 then
             self:setPosition(self:getPositionX(), self:getPositionY() + speed)


        --right
        elseif direction == 3 then
            self:setPosition(self:getPositionX() + speed, self:getPositionY())
        end
    end
    --self:setDirection(direction)
end


function a_Sprite:getDirection(tx, ty)
    local x, y = self:getPosition()
    --debug("x = %0.2f, y = %0.2f, tx = %0.2f, ty = %0.2f", x, y, tx, ty)
    
    --top area of the Y axis
    if ty - y > 0 then
        --up
        if ty - y > math.abs(tx - x) then
            --debug("move up")
            return 2
        else
            --right
            if tx - x > 0 then
                --debug("move right")
                return 3
            --left
            else
                --debug("move left")
                return 1
            end
        end
    --bottom area of the Y axis 
    else
        --down
        if math.abs(ty - y) > tx - x then
            --debug("move down")
            return 0
        else
            --right
            if tx - x > 0 then
                --debug("move right")
                return 3
            --left
            else
                --debug("move left")
                return 1
            end
        end
    end
end


-- END


深入浅出Lua编程实战视频课程:(3)lua编译器源代码赏析

-
  • 1970年01月01日 08:00

Cocos2d-x3.3Final(6)Slider常用成员函数(C++)

滑动栏: Slider * slider = Slider::create(); slider->loadBarTexture("sliderTrack.png");//设置滑动栏的背景图片 s...
  • LightUpHeaven
  • LightUpHeaven
  • 2015-02-03 17:38:53
  • 2959

lua on cocos2dx 札记(二)

封装了一个动画精灵类。。。需要extern.lua支持 function debug(...)     CCLuaLog("debug() start @"..os.date())     --C...
  • oztang
  • oztang
  • 2013-11-29 17:05:52
  • 486

lua on cocos2dx 札记(一)

引子 2013年末的清闲日子里,偶拾lua,窥得coco2ds,勾起早年j2me游戏开发回忆。。。 兵器谱: 1、ubuntu:winxp上的各种安全工具搞得人心烦,以至于我这个做产品的...
  • oztang
  • oztang
  • 2013-11-28 14:31:49
  • 959

cocos2dx 虚拟摇杆 lua实现

  • 2016年07月25日 18:24
  • 516KB
  • 下载

quick cocos2dx lua -v3.3

  • 2017年04月03日 14:53
  • 31B
  • 下载

如何优雅进行 cocos2dx + lua 开发

本人使用的是 Cocos2dx 3.4 + Visual studio 2013 一、IDE 的选择         visual studio 2013 + Bebalua (visual st...
  • xzben
  • xzben
  • 2016-04-14 15:47:47
  • 1225

cocos2dx 3.4 lua学习一个简单的小例子

1.环境 cocos2d 3.4 编译器 cocosidehttp://cn.cocos2d-x.org/tutorial/show?id=1069跟着这篇文章进行学习 不过有几个地方会不同 具体看代...
  • maxiaosheng521
  • maxiaosheng521
  • 2015-03-28 12:58:09
  • 1127

Cocos2dx lua 启动流程

cocos2dx 版本 3.x,工具 VS2013 + babelua插件
  • taotanty
  • taotanty
  • 2016-06-15 18:39:54
  • 4189

Cocos2dx 3.12 Lua开发环境搭建_01

本文记录在 Windows 下搭建 cocos2dx lua 开发环境,还有调试设置。 系统:Windows 7 64 IDE:Mircrosoft Visual Studio 2013 Cocos2...
  • yuan2053
  • yuan2053
  • 2017-03-08 10:22:14
  • 4714
收藏助手
不良信息举报
您举报文章:lua on cocos2dx 札记(三
举报原因:
原因补充:

(最多只允许输入30个字)