-- GameView is a combination of view and controllerstart调用scheduleUpdate开启一个定时器,绑定每帧刷新时的回调函数:step,回调函数的参数为逝去的时间,step每次随机一两秒的数字,然后每次减去帧的逝去时间,当为0时调用addBug添加虫子,其实意义就是每隔一两秒添加一个虫子。并判断所有虫子的坐标是否在中心洞中,如果是调用bugEnterHole,该函数播放虫子进洞效果动画和音效,减少血量值,当血量小于等于0时分发游戏结束事件。
local GameView = class("GameView",cc.load("mvc").ViewBase)
BugBase = import("..models.BugBase")
BugAnt = "..models.BugAnt")
BugSpider = "..models.BugSpider")
BugSprite = ".BugSprite")
DeadBugSprite = ".DeadBugSprite")
GameView.HOLE_POSITION = p(display.cx - 30,43)">cy - 75)
INIT_LIVES = 99999
ADD_BUG_INTERVAL_MIN = 1
ADD_BUG_INTERVAL_MAX = 3
IMAGE_FILENAMES = {}
IMAGE_FILENAMES[BugBase.BUG_TYPE_ANT] = "BugAnt.png"
BUG_TYPE_SPIDER] = "BugSpider.png"
BUG_ANIMATION_TIMES = {}
BUG_ANIMATION_TIMES[0.15
0.1
ZORDER_BUG = 100
ZORDER_DEAD_BUG = 50
events = {
PLAYER_DEAD_EVENT = "PLAYER_DEAD_EVENT",
}
function GameView:start()
self:scheduleUpdate(handler(self,self.step))
return self
end
stop()
unscheduleUpdate()
step(dt)
if lives_ <= 0 then return end
addBugInterval_ = addBugInterval_ - dt
addBugInterval_ <= then
addBugInterval_ = math.random(GameView.ADD_BUG_INTERVAL_MIN,GameView.ADD_BUG_INTERVAL_MAX)
addBug()
for _,bug in pairs(bugs_) do
bug:if getModel():getDist() <= bugEnterHole(bug)
end
return getLives()
lives_
getKills()
kills_
bugType = BugBase.BUG_TYPE_ANT
if random(1,255)">2) % 2 == BUG_TYPE_SPIDER
local bugModel
bugType == BugBase.BUG_TYPE_ANT bugModel = BugAnt:create()
else
bugModel = BugSpider:bug = BugSprite:create(GameView.bugType],153)">bugModel)
:start(GameView.HOLE_POSITION)
:addTo(bugsNode_,43)">ZORDER_BUG)
bugs_[bug] = bug
bugEnterHole(bug)
bugs_[bug] = nil
bug:fadeOut({time = 0.5,removeSelf = true})
:scaleTo({scale = 0.3})
:rotateTo({rotation = 360,255)">720)})
lives_ = lives_ - livesLabel_:setString(lives_)
audio.playSound("BugEnterHole.wav")
dispatchEvent({name = GameView.events.PLAYER_DEAD_EVENT})
bugDead(bug)
imageFilename = GameView.IMAGE_FILENAMES[getType()]
DeadBugSprite:create(imageFilename)
:2.0,43)">delay = move(getPosition())
:rotate(getRotation() + 120)
:ZORDER_DEAD_BUG)
removeSelf()
kills_ = kills_ + "BugDead.wav")
onCreate()
lives_ = GameView.INIT_LIVES
kills_ = 0
bugs_ = {}
addBugInterval_ = -- add touch layer
newLayer()
:onTouch(onTouch))
:self)
-- add background image
newSprite("PlaySceneBg.jpg")
:move(center)
:-- add bugs node
bugsNode_ = newNode():-- add lives icon and label
"Star.png")
:left + 50,43)">top - 50)
:self)
livesLabel_ = Label:createWithSystemFont(lives_,0)">"Arial",255)">32)
:90,128)">-- create animation for bugs
for bugType,153)">filename pairs(GameView.IMAGE_FILENAMES) -- load image
texture = loadImage(filename)
frameWidth = texture:getPixelsWide() / frameHeight = getPixelsHigh()
-- create sprite frame based on image
frames = {}
i = 0,255)">1 frame = newSpriteFrame(texture,43)">rect(frameWidth * i,153)">frameWidth,153)">frameHeight))
frames[#frames + 1] = frame
-- create animation
animation = newAnimation(frames,153)">bugType])
-- caching animation
setAnimationCache(filename,153)">animation)
-- bind the "event" component
bind("event")
onTouch(event)
event.name ~= "began" x,153)">y = x,43)">y
if checkTouch(y) bugDead(onCleanup()
removeAllEventListeners()
return GameView
关于虫子的操作稍后再看,继续看GameView,onCreate中初始化血量,杀死虫子数等数据,setAnimationCache初始化虫子的播放动画。创建点击回调onTouch,当点击的坐标命中到某虫子时表示杀死该虫子。
添加虫子:
原文链接:https://www.f2er.com/cocos2dx/342311.html