為什么會(huì)這樣
local Snake=class("Snake")
local Body=require"app.Body"
local cInitLen=3
function Snake:ctor(node)
self.BodyArray={}
self.node=node
--給予蛇移動(dòng)的方向
?self:SetDir("left")
--self.MoveDir="left"
--將蛇初始化
? for i=1,cInitLen do
self:Grow(i==1)
? end
??
end
function Snake:Grow(isHead)
--初始的位置
local tailX,tailY=self:GetTailGrid()
local body=Body.new(self,tailX,tailY,self.node,isHead)
table.insert(self.BodyArray,body)
end
function Snake:GetTailGrid()
--無(wú)蛇情況
? if #self.BodyArray==0 then
? return 0,0
? end
--有蛇情況返回其尾巴,以用于添加蛇身
? local tail=self.BodyArray[#self.BodyArray]
? return tail.X,tail.Y
end
function Snake:Update()
? ??
? ? if #self.BodyArray==0 then
? ?return?
? ? end
?
?for i=#self.BodyArray,1,-1 do
? ?local body=self.BodyArray[i]
? ? ? --i=1時(shí)為頭部
? ? ?if i==1 then
? ? ? ?body.X,body.Y=OffsetGridByDir(body.X,body.Y,self.MoveDir)
? ? ? ? ??
? ? ?else
? ? ? ? local front=self.BodyArray[i-1]
? ? ? ? ?body.X,body.Y=front.X,front.Y
? ? ?end
? ? body:Update()
?end
end
function OffsetGridByDir(x,y,Dir)
? ? ? if Dir=="left" ?then return x-1,y
? ? ? ? ?elseif Dir=="right" then return x+1,y
? ? ? ? ?elseif Dir=="up" ? ?then return x,y-1
? ? ? ? ?elseif Dir=="down" ?then return x,y+1
? ? ? ? ?else
? ? ? ? ? ? ? ? print("unknown Dir")
? ? ? ? ? ? ? ? return x,y
? ? ? end
end
--水平只能走垂直
--垂直只能走水平
local hvTable={
?["left"]="h",
?["right"]="h",
?["up"]="v",
?["down"]="v",
}
local rotTable={
?["up"]=90,
?["down"]=-90,
?["left"]=0,
?["right"]=180,
}
?function Snake:SetDir(dir)
?if hvTable[dir]==hvTable[self.MoveDir] then?
? return
?end
? self.MoveDir=dir
? local head=self.BodyArray[1]
? ? ?head.sp:setRotation(rotTable[self.MoveDir])
? ?
?end
return Snake
2016-03-15
終于知道問題出現(xiàn)在哪里了
--給予蛇移動(dòng)的方向
?self:SetDir("left")
--self.MoveDir="left"
--將蛇初始化
? for i=1,cInitLen do
self:Grow(i==1)
? end
這里調(diào)用self:SetDir()函數(shù)的時(shí)候,self.BodyArray里面還沒有元素,所以取BodyArray[1]肯定一直nil,只要把這個(gè)函數(shù)位置放在for循環(huán)后面就好了
2016-03-15
我也遇到這種情況了,head好像沒有取出來(lái),一直是nil的。不知道為什么