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 on cocos2dx 札记(一)

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

cocos2dx-lua 自定义事件类

  • 2016年12月28日 18:10
  • 2KB
  • 下载

quick-cocos2dx用lua调用自定义c++

  • 2014年07月30日 17:58
  • 124KB
  • 下载

cocos2dx lua 接微博SDK(三)--获取用户信息,好友信息

一、获取用户信息 1,在APPActivity里加上 //获取用户信息 public static void getUserData(){     mAccessToken = AccessT...

cocos2dx lua绑定

  • 2016年08月26日 10:02
  • 5KB
  • 下载

cocos2dx 札记1 - 基础概念梳理

五个基本元素 Scenes 一个场景由多个layer组成   CCTransitionScene可以实现场景的切换   Director 控制场景之间的切换 控制游戏的进度,状态 ...

cocos2dx登陆模块客户端lua脚本

  • 2014年04月20日 22:43
  • 12KB
  • 下载

cocos2dx3.2的微信打飞机Lua版

  • 2015年07月17日 12:03
  • 4.53MB
  • 下载

关于cocos2dx手游lua文件加密的解决方案

很多使用cocos2dx+lua做游戏的同学,都会想到一个问题,我的游戏一旦发布,怎样才能保证的我脚本代码不被破解,不泄露代码。虽然这和开源、共享的原则不合,但是代码也是coder的劳动成果,理应得到...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:lua on cocos2dx 札记(三
举报原因:
原因补充:

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