• quick cocos naja


    local scheduler = require(cc.PACKAGE_NAME .. ".scheduler")
    
    
    
    local MainScene = class("MainScene", function()
        return display.newScene("MainScene")
    end)
    
    --  相当于C++中的构造函数
    function MainScene:ctor()
        --      将背景设置为白色,而且这个作为当前场景的层,以便以后实现触摸事件
        self.touchLayer_ =   display.newColorLayer(cc.c4b(255,255,255,255)):addTo(self)
    
        --添加忍者精灵
        self.player_ = display.newSprite("Player.png"):addTo(self.touchLayer_)
        self.player_:pos(self.player_:getContentSize().width / 2 , display.height / 2)
    
        -- 初始化存储飞镖和敌人(怪物)的数组
        self.projectiles_ = {}
        self.monsters_ = {}
    
        -- 添加每帧刷新的方法
        self:addNodeEventListener(cc.NODE_ENTER_FRAME_EVENT,handler(self , self.update))
        self:scheduleUpdate()
    
        --  添加一个每秒刷新的方法
        scheduler.scheduleGlobal(function()
            self:addMonster() --每秒调用的方法
        end , 1)  -- 1 为时间
    
        --添加触摸事件
        self.touchLayer_:setTouchEnabled(true)
        self.touchLayer_:addNodeEventListener(cc.NODE_TOUCH_EVENT,function(event)
            if event.name == "ended" then
                self:onTouchEnded(event.x,event.y)
            end
            return true
        end)
    
    
    
    end
    
    --添加敌人
    function MainScene:addMonster()
        local monster = display.newSprite("monster.png"):addTo(self.touchLayer_)
    
        local minY = monster:getContentSize().height / 2
        local maxY = display.height - monster:getContentSize().height / 2
    
        local rangeY = maxY - minY
    
        local actualY = math.random(rangeY)
        monster:pos(display.width + monster:getContentSize().width / 2 , actualY)
    
        local minDuration = 2.0
        local maxDuration  = 4.0
    
        local rangeDuration = maxDuration - minDuration
    
        local actualDuration = (math.random(rangeDuration))
    
        transition.moveTo(monster,{
            x = -monster:getContentSize().width / 2,
            y = actualY ,
            time = actualDuration,
            onComplete = function (event)
                --执行结束后删除
                self.monsters_[event] = nil
                event:removeSelf()
            end
    
        })
        --  放入 存放怪物的数据  以后以便删除
        self.monsters_[monster] = monster
    end
    
    function MainScene:onTouchEnded(x , y)
        print("onTouchEnded")
    
        local location = cc.p(x,y)
        local projectile = display.newSprite("Projectile.png"):addTo(self)
        projectile:pos(20 , display.height / 2)
        local px , py = projectile:getPosition()
    
        local offset = cc.pSub(location,cc.p(px,py))
    
        if (offset.x <= 0) then return end
    
        local realX = display.width + projectile:getContentSize().width / 2
        local ratio = offset.y / offset.x
    
        local realY = realX * ratio +py
    
        local realDest = cc.p(realX,realY)
    
        local offRealX = realX - px
        local offRealY = realY - py
    
        local length = math.sqrt(offRealX * offRealX + offRealY * offRealY)
    
        local velocity = 480 / 1
    
        local realMoveDuration = length / velocity
    
    
        transition.moveTo(projectile,{
            x = realDest.x ,
            y = realDest.y ,
            time = realMoveDuration ,
            onComplete = function (event)
                self.projectiles_[event] = nil
                event:removeSelf()
    
            end
        })
        self.projectiles_[projectile] = projectile
    
    end
    
    
    -- 求两点间距离
    local function dist(ax, ay, bx, by)
        local dx, dy = bx - ax, by - ay
        return math.sqrt(dx * dx + dy * dy)
    end
    
    --每帧刷新
    function MainScene:update(dt)
    
        --    print("update")
        local projectilesToDelete = {}
    
        for k_pro, v_pro in pairs(self.projectiles_) do
    
    
            local monstersToDelete = {}
    
            for k_mon , v_mon in pairs(self.monsters_) do
                local p_x , p_y = v_pro:getPosition()
                local m_x,m_y = v_mon:getPosition()
    
    
    
                if dist(p_x,p_y,m_x,m_y) <= 30  then
    
                    monstersToDelete[v_mon] = v_mon
                    projectilesToDelete[v_pro] = v_pro
                end
    
            end
    
            for k_m_d , v_m_d in pairs(monstersToDelete) do
                --            local x , y = v_m_d:getPosition()
                self.monsters_[v_m_d] = nil
                v_m_d:removeSelf()
    
    
            end
    
            monstersToDelete = nil
        end
    
        for k_p_d , v_p_d in pairs(projectilesToDelete) do
    
            self.projectiles_[v_p_d] = nil
            v_p_d:removeSelf()
        end
        projectilesToDelete = nil
    
    end
    
    
    
    function MainScene:onEnter()
    end
    
    function MainScene:onExit()
    end
    
    return MainScene
  • 相关阅读:
    RedMine 1.3.3 安装攻略
    .net 4.0 framework 安装时发生严重错误
    MYSQL安装配置
    接口隔离ISP
    依赖倒置DIP
    VS2010添加WP模板
    VS2012尝鲜
    OCP开放闭合
    单一职责
    里氏替换
  • 原文地址:https://www.cnblogs.com/yufenghou/p/4312172.html
Copyright © 2020-2023  润新知