gpt4 book ai didi

javascript - 在 React 组件中渲染 Phaser.io Canvas

转载 作者:数据小太阳 更新时间:2023-10-29 05:31:16 29 4
gpt4 key购买 nike

import React, { Component } from 'react';
import Phaser from 'phaser';

export default class App extends Component {
constructor(props) {
super(props);

this.game = null;
this.create = () => {
this.game.stage.backgroundColor = '#124184';
}
}

componentDidMount() {
this.game = new Phaser.Game(800, 600, Phaser.CANVAS, 'phaser-target',
{
create: this.create
}
);

console.log(this.create);
}

render() {
return (
<section id="phaser-target">
hello there old friend
</section>
)
}
}

所以我创建了 Phaser 游戏对象,在组件中做了 mount 方法,注意我的 html 看起来像这样:

<body style="overflow: hidden;">
<noscript>
You need to enable JavaScript to run this app.
</noscript>
<div id="root"><section><section id="phaser-target">hello there old friend</section></section></div>

<script type="text/javascript" src="/static/js/bundle.js"></script>

<canvas width="1024" height="768"></canvas></body>

Canvas 正在目标元素之外呈现。

还有,我的 this.create 函数,我从来没有真正进入过那里。我 console.log 但它永远不会进入。

我正在重新阅读代码,对我来说这一切都有意义并且应该可以工作,但我不明白为什么不行。

谁能给我一些指导?

最佳答案

您没有提及您使用的是哪个版本的 Phaser,这一点非常重要,因为这些年来 API 已更改多次。

此答案假定您使用的是当前最新版本的 Phaser (3.1.4)

```

var config = {
type: Phaser.AUTO,
parent: 'phaser-parent',
pixelArt: true,
width: 800,
height: 600,
scene: {
preload: this.preload.bind(this),
create: this.create.bind(this)
}
};

var game = new Phaser.Game(config);

```

将父级配置设置为您的移相器父级的 ID。它应该附加到正确的元素。

我猜问题是 Phaser 没有检测到这一点并自动附加到文档正文元素。

要正确调用创建方法,您应该创建一个普通的 ES6 类方法:

create() {
//do stuff
}

现在你应该用 bind(this) 调用它:

this.create.bind(this) 

你应该阅读 ES6 类中的 React 文档范围。这里有一节是关于为什么绑定(bind) this 对于事件是必要的,这与你需要在这里做的原因相同

https://reactjs.org/docs/handling-events.html

关于javascript - 在 React 组件中渲染 Phaser.io Canvas ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51455924/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com