为了账号安全,请及时绑定邮箱和手机立即绑定

为什么会这样

55feea300001b15a05000159.jpg

55feea30000132df05000254.jpg


local Snake=class("Snake")

local Body=require"app.Body"


local cInitLen=3


function Snake:ctor(node)

self.BodyArray={}

self.node=node

--给予蛇移动的方向

 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()

--无蛇情况

  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时为头部

     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


正在回答

4 回答

终于知道问题出现在哪里了

--给予蛇移动的方向

 self:SetDir("left")

--self.MoveDir="left"

--将蛇初始化

  for i=1,cInitLen do

self:Grow(i==1)

  end

这里调用self:SetDir()函数的时候,self.BodyArray里面还没有元素,所以取BodyArray[1]肯定一直nil,只要把这个函数位置放在for循环后面就好了

1 回复 有任何疑惑可以回复我~

我也遇到这种情况了,head好像没有取出来,一直是nil的。不知道为什么

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

为什么会这样

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信