你好,Stack Overflow社区,

我已经开始使用JavaScript和Phaser框架了.我现在正在try 创建精灵,而我从中创建精灵的代码位于"create"/creator函数之外的一个单独的函数中.这是我的精灵代码:

player1 = this.physics.add.sprite(100, 450, 'Billy')

player1.setBounce(0.2);
player1.setCollideWorldBounds(true);

到目前为止,当我将创建精灵的代码放在我的"create"函数中时,它加载得很好,没有出现问题.但是,一旦我将其放入一个单独的函数(我将其称为player1Create)并从CREATE函数调用它,它就停止工作,并给出以下错误消息:

Cannot read properties of undefined (reading 'add')
    at player1Create (playerRules.js?autoVer=%270.00002%27:2:24)

我try 将该函数包含到配置对象的scene属性中,但这不会更改结果或错误日志(log).我还向函数中添加了"return player1",并将creator函数中同名的变量赋值为player1Create,但同样,没有改变任何东西.

任何帮助都非常感谢!(如果我的问题听起来有点愚蠢,我很抱歉)

推荐答案

根据你的相位仪游戏"structure",它可能会有一些不同的东西,但我假设你的config应该是这样的:

let config = {
    ...
    scene: { create},
};

如果是这样的话,问题是您的新函数player1Create不会自动添加到"Phaser-Object",所以简单的解决方案是将当前的thiscreate函数传递到player1Create.

大概是这样的:

 function create(){
     ...
     player1Create(this);
 }

 function player1Create(scene) {  
     ...
     // see here "scene" was used to create the sprite
     player1 = scene.physics.add.sprite(100, 450, 'Billy')
     ...
 }

现在代码应该可以工作了,但现在在player1Create函数中,您必须使用参数scene而不是this.

Alternate Version:

如果您希望在函数中使用this,但必须传递this关键字/对象,则还有其他几个选项可能看起来有点奇怪(这里是最常见的两个选项):

  1. 使用call函数并传递当前this对象(checkout the documentation for details)

    Player1Create.call(This);

  2. 使用bind函数,将this绑定到函数(checkout the documentation for details)

    bind. println();

btw.:如果你多分享一些代码,帮助你会更容易一些.对于future 的问题,请查看这article on how the create good questions on SO个,这可能会有所帮助.

Javascript相关问答推荐

为什么getRecord()会因为与_logger相关的错误而失败?(使用Hedera SDK)

JQuery. show()工作,但. hide()不工作

React Code不在装载上渲染数据,但在渲染上工作

为什么promise对js中的错误有一个奇怪的优先级?

成功完成Reducers后不更新状态

setcallback是什么时候放到macrotask队列上的?

使用GraphQL查询Uniswap的ETH价格

有条件重定向到移动子域

映射类型定义,其中值对应于键

JavaScript是否有多个`unfined`?

使用插件构建包含chart.js提供程序的Angular 库?

使用Ace编辑器对子组件实例的native-element 进行Angular 获取时面临的问题

FireBase云函数-函数外部的ENV变量

在渲染turbo流之后滚动到元素

MongoDB通过数字或字符串过滤列表

在高位图中显示每个y轴系列的多个值

有没有办法在R中创建一张具有多个色标的热图?

Plotly.js栏为x轴栏添加辅助文本

有角粘桌盒阴影

将字体样式应用于material -UI条形图图例