Lua贪吃蛇开发笔记1

来源:互联网 发布:阿里健康大数据 编辑:程序博客网 时间:2024/05/21 09:25
Lua贪吃蛇笔记1

--------Lua添加音乐-------
cc.SimpleAudioEngine:getInstance():playMusic("**.mp3",true)

------Lua添加成绩-------
local score = 0
local scoreLabel = nil

scoreLabel = cc.Label:createWithSystemFont("Score : 0","",字号)
scoreLabel:setPosition(*,*)
layer:addChild(scoreLabel)
scoreLabel:setColor(cc.c3b(*,*,*))

在需要加分的地方加如下代码
score = score + 10  (加10分)
scoreLabel:setString(string.format("Score : %d",score))

-------真随机---------
math.randomseed(os.time())

----------Lua触摸监听----------
local listener = cc.EventListenerTouchOneByOne:create()
listener:registerScriptHandler(onTouchBegan,cc.Handler.EVENT_TOUCH_BEGAN)
listener:registerScriptHandler(onTouchMoved,cc.Handler.EVENT_TOUCH_MOVED)
listener:registerScriptHandler(onTouchEnded,cc.Handler.EVENT_TOUCH_ENDED)
cc.Director:getInstance():getEventDispatchr():addEventListenerWithSceneGraphPriority(listener,layer)

--------------------MenuScene场景----------------------
local MenuScene = class("MenuScene",function()
return cc.Scene:create()
end)

function MenuScene:create()
local scene = MenuScene.new()
scene:addChild(scene:init())
return scene
end

function MenuScene:ctor()
self.visibleSize = cc.Directior:getInstance():getVisibleSize()
end

function MenuScene:init()
local layer = cc.Layer:create()

return layer
end

return MenuScene

--------------------------------------------------------

-----------------GameScene主逻辑---------------
---1.在背景上添加正方形的阴影
--背景层                             背景层颜色,透明度  背景层尺寸
local bgc = cc.LayerColor:create(cc.c4b(84,81,78,150),640,640)
bgc:setPosition(0,220)
layer:addChild(bgc)

---2.在阴影上画格子(10*10)
--画线 for循环
for i=0,9 do
--竖线 横线
local shuxian = cc.DrawNode:create()
local hengxian = cc.DrawNode:create()
----------画线段------起点------------------终点---------------线宽---线颜色------
shuxian:drawSegment(cc.vertex2F(i*60,0),cc.vertex2F(i*60,600),1,cc.c4f(*,*,*,*))
hengxian:drawSegment(cc.vertex2F(0,i*60),cc.vertex2F(600,i*60),1,cc.c4f(*,*,*,*))
--在背景层上添加横线,竖线----
bgc:addChild(shuxian)
bgc:addChild(hengxian)

---3.添加蛇头(位置随机产生)
首先将蛇头,蛇身,食物重新封装一个类,节点Snake
构造函数中:
self.col = 0
self.row = 0

初始化中传参数type,为类型,类Snake中,type=1时,表示蛇头,type=2时,表示食物,type=3时,表示蛇身
local snake = nil
if type == 1 then
snake = cc.Sprite:create("snakeHead.png")
elseif type == 2 then
snake = cc.Sprite:create("snakeFood.png")
elseif type == 3 then
snake = cc.Sprite:create("snakeBody.png")
end
记得设置snake的锚点和位置,使其正好在画出的方格中
layer:addChild(snake)

下面正式添加蛇头
local snake = require("Snake")  ---Snake类-----
local snakeHead = snake:create(1) ----类型1为蛇头,详情见类Snake---
snakeHead.col = math.random(0,9) ---列数为从0-9中的随机数(因为一共就10行10列)--
snakeHead.row = math.random(0,9) --同上--
----设定位置,网格中每个小格都是60*60,这样设定可使蛇头刚好在小格中间,蛇身,食物同理----
snakeHead:setPosition(snakeHead.col*60,snakeHead.row*60)
bgc:addChild(snakeHead)

---4.添加食物 (同蛇头)
local food = require("Snake")
local snakeFood = food:create(2)
snakeFood.col = math.random(0,9)
snakeFood.row = math.random(0,9)
snakeFood:setPosition(snakeFood.col*60,snakeFood.row*60)
bgc:addChild(snakeFood)

---5.触摸,移动蛇头
local function onTouchBegan(touch,event)
-------触摸位置与蛇头位置之差的绝对值,abs为绝对值----------
local mx = math.abs(touch:getLocation().x - snakeHead.col*60)
local my = math.abs(touch:getLocation().y - snakeHead.row*60)

if my > mx then   ----为上下移动,自己领悟,下同----
if touch:getLocation().y > snakeHead.row*60 then ----为向上移动,自己领悟,下同----
-----#allbody表示身体的长度,应和成绩一样在前面声明,local allbody = {},local snakeBody = nil------
if #allbody > 0   
-----dir表示方向,参数1,2,3,4分别代表上,下,左,右-----
if snakeHead.dir == 2 then --这两句代码的意思是如果蛇身长度大于0,且方向为1,即向上,则遇到方向为2时,也就是向下时,跳出--
                                           --意思是当有身体时,蛇不能反走,蛇向上走时,点击屏幕下方,蛇不往回走--
return 
end
end
snakeHead.dir = 1 ---my>mx,且touch:getLocation().y>snakeHead.row*60时,规定方向dir=1,实为向上----
else
if #allbody > 0 then   --向下走时,点击向上走无效--
if snakeHead.dir == 1 then
return 
end
end
snakeHead.dir = 2  ---my>mx,且touch:getLocation().y<snakeHead.row*60时,规定方向dir=2,实为向下----
end
--这里只给出上下方向的,左右同理--

1 0
原创粉丝点击