在love2D中驼峰继承

加加勋爵

我正在尝试使用Lua中的驼峰库对以löve2D编码的游戏进行OOP。一切正常。但是,当我尝试按以下方式使用代码时,出现一条消息错误,告诉我“ self”是一个零值。有人可以告诉我我做错了什么吗?


Item=Class{

  init=function(x,y,size)
    self.x=x
    self.y=y
    self.size=size

    self.dx=dx
    self.dy=dy
    self.dx2=dx2
    self.dy2=dy2
  end;

  update=function(dt)
    self.dx=self.dx+self.dx2
    self.x=self.x+self.dx*dt
    self.dy=self.dy+self.dy2
    self.y=self.y+self.dy*dt
  end;

  coliide=function(ball)
    return math.sqrt((self.x-ball.x)^2+(self.y-ball.y)^2)<self.size
  end;

  reset=function()
    self.x=love.graphics.getWidth()/2
    self.y=love.graphics.getHeight()/2
    self.dy=0
    self.dx=0
    self.dy2=0
    self.dx2=0
  end

}

谢谢和问候

小猪

在给定的片段中

Item = Class{}
Item.init=function(x,y,size)
    self.x = x
end

selfnil因为您没有定义它。

为了执行您想要的操作,您必须定义如下函数:

Item.init = function(self, x, y, size)
   self.x = x
end

然后这样称呼它

Item.init(Item, x, y, size)

然后self等于Item,您可以将其索引而不会出错。

为了使此操作更加方便,我们可以使用“语法糖”

让我们看一下Lua 5.3参考手册:

3.4.10-函数调用

调用v:name(args)是的语法糖v.name(v,args),但调用v仅被评估一次。

3.4.11-功能定义

冒号语法用于定义方法,即具有隐式额外参数self的函数。因此,该声明

 function t.a.b.c:f (params) body end 

是语法糖

 t.a.b.c.f = function (self, params) body end

利用这些知识,我们可以简单地编写:

function Item:init(x,y,size)
  self.x = x
end

并这样称呼它:

Item:init(x,y)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

从表中抽出Love2d

来自分类Dev

Love2d:表格中的随机元素

来自分类Dev

无法在Love2D中读取txt文件

来自分类Dev

Love2D,LUA Tween重设

来自分类Dev

Love2D 值更新太快

来自分类Dev

如何改变Love2D中每一帧的速度?

来自分类Dev

Love2D / Lua动画系统和表格

来自分类Dev

背景图像重叠字符(love2d)

来自分类Dev

lua 中 C# 中的“goto”循环是否有等价物?(必须兼容Love2D)

来自分类Dev

生成一个随机数,但在LUA / Love2d中每隔随机秒

来自分类Dev

Love2D - 如何对 love.graphics.scale 结果进行 math.floor 计算?

来自分类Dev

LOVE2D游戏引擎; 2D Platformer碰撞系统

来自分类Dev

如何在Love2d中使用导出为Lua的平铺地图/瓷砖

来自分类Dev

Love2D Lua错误:尝试调用字段“ isDown”(nil值)

来自分类Dev

为什么此冲突代码不起作用?(love2d)

来自分类Dev

如何在Love2d上仅运行一次绘制功能

来自分类Dev

编写功能以检查状态机的当前状态[Lua / Love2d]

来自分类Dev

Love2D:当我向上或向下按下时,停止播放器移动

来自分类Dev

如何在Lua,Love2D中用表格替换打印的字符串

来自分类Dev

等待用户举起鼠标-不起作用:Love2D

来自分类Dev

在love2d中使用canvas会导致内存不足错误

来自分类Dev

Love2d:从不同的文件创建多个相同的对象

来自分类Dev

LOVE2D,跟随者对象的不同步运动

来自分类Dev

如果在创建画布后调整了窗口的大小,则退出时Love2d崩溃

来自分类Dev

Love2D在给定时间内旋转图像,直到达到一定角度

来自分类Dev

用LOVE2D制作平台游戏-垂直关卡在特定点上没有碰撞

来自分类Dev

Love2D 行走动画在没有 spritesheet 的情况下按按键播放

来自分类Dev

Symfony2中的继承

来自分类Dev

Angular 2 组件中的继承

Related 相关文章

  1. 1

    从表中抽出Love2d

  2. 2

    Love2d:表格中的随机元素

  3. 3

    无法在Love2D中读取txt文件

  4. 4

    Love2D,LUA Tween重设

  5. 5

    Love2D 值更新太快

  6. 6

    如何改变Love2D中每一帧的速度?

  7. 7

    Love2D / Lua动画系统和表格

  8. 8

    背景图像重叠字符(love2d)

  9. 9

    lua 中 C# 中的“goto”循环是否有等价物?(必须兼容Love2D)

  10. 10

    生成一个随机数,但在LUA / Love2d中每隔随机秒

  11. 11

    Love2D - 如何对 love.graphics.scale 结果进行 math.floor 计算?

  12. 12

    LOVE2D游戏引擎; 2D Platformer碰撞系统

  13. 13

    如何在Love2d中使用导出为Lua的平铺地图/瓷砖

  14. 14

    Love2D Lua错误:尝试调用字段“ isDown”(nil值)

  15. 15

    为什么此冲突代码不起作用?(love2d)

  16. 16

    如何在Love2d上仅运行一次绘制功能

  17. 17

    编写功能以检查状态机的当前状态[Lua / Love2d]

  18. 18

    Love2D:当我向上或向下按下时,停止播放器移动

  19. 19

    如何在Lua,Love2D中用表格替换打印的字符串

  20. 20

    等待用户举起鼠标-不起作用:Love2D

  21. 21

    在love2d中使用canvas会导致内存不足错误

  22. 22

    Love2d:从不同的文件创建多个相同的对象

  23. 23

    LOVE2D,跟随者对象的不同步运动

  24. 24

    如果在创建画布后调整了窗口的大小,则退出时Love2d崩溃

  25. 25

    Love2D在给定时间内旋转图像,直到达到一定角度

  26. 26

    用LOVE2D制作平台游戏-垂直关卡在特定点上没有碰撞

  27. 27

    Love2D 行走动画在没有 spritesheet 的情况下按按键播放

  28. 28

    Symfony2中的继承

  29. 29

    Angular 2 组件中的继承

热门标签

归档