Как интегрировать Phaser в React

У меня есть приложение React, созданное с помощью create-react-app, и я также пытаюсь интегрировать Phaser 3. Я подписался на это руководство, чтобы начать. У меня есть холст, отображающий текст, но загрузка изображений в предварительной загрузке, похоже, не работает. Я получаю, что по умолчанию не удалось загрузить отображаемое изображение текстуры.

import ExampleScene from "./scenes/ExampleScene";

import * as React from "react";

export default class Game extends React.Component {
  componentDidMount() {
    const config = {
      type: Phaser.AUTO,
      parent: "phaser-example",
      width: 800,
      height: 600,
      scene: [ExampleScene]
    };

    new Phaser.Game(config);
  }

  shouldComponentUpdate() {
    return false;
  }

  render() {
    return <div id = "phaser-game" />;
  }
}

ПримерСцена:

import Phaser from "phaser";

export default class ExampleScene extends Phaser.Scene {
  preload() {
    this.load.image("logo", "assets/logo.png");
  }
  create() {
    const text = this.add.text(250, 250, "Phaser", {
      backgroundColor: "white",
      color: "blue",
      fontSize: 48
    });

    text.setInteractive({ useHandCursor: true });
    this.add.image(400, 300, "logo");

    text.on("pointerup", () => {
      console.info("Hello!");
      //store.dispatch({ type: ACTION_TYPE });
    });
  }
}

Идея состоит в том, чтобы создать визуализацию с растущими цветами на основе простого генного движка. Таким образом, Фазер получал инструкции из Магазина о текущем состоянии.

Я предполагаю, что это как-то связано с тем, как загружается Phaser, и есть конфликт с тем, как обновляется React. Я запрещаю обновление компонента, так как мне нужно, чтобы игра получала инструкции, прослушивая магазин

Я уже смотрел на этот ТАК ответ и сопроводительная обертка, но он устарел.

Как я могу заставить Phaser загружать изображения в приложении Create-React?

Песочница кода: https://codesandbox.io/s/github/nodes777/react-punnett/tree/phaser-game Репо: https://github.com/nodes777/реакт-паннет/дерево/фазер-игра

Вместо этого попробуйте использовать хук с функциональными компонентами :) stackblitz.com/edit/react-phaser?file=hooks%2FuseGame.ts

jdnichollsc 09.09.2021 23:13
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
8
1
10 720
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Я начал с нуля и создал мой собственный шаблон из фазер 3 шаблон. Я написал о конкретных шагах по добавлению React в шаблон Phaser 3 здесь.

Кажется, что вы можете извлечь из Create-React-App и добавить оттуда Phaser 3, но предупреждения не извлекать меня отвратили от этого решения.

Я прочитал ваше сообщение в блоге meduim, к сожалению, это не сработало, у меня появились ошибки, говорящие о том, что невозможно найти «реагировать», невозможно найти «index.html».

ShashankAC 25.01.2020 18:51

Хм, вы должны быть в состоянии бежать git clone https://github.com/nodes777/phaser3-react-template, затем npm install, затем npm start. Вы пробовали это или следовали учебнику с нуля? Дайте мне знать, если вы получите ошибки при выполнении этих инструкций.

Taylor N 26.01.2020 00:58

Другой вариант — использовать Веб-компоненты, чтобы иметь возможность интегрировать Фазер с любым другим фреймворком (React, Angular, VueJS и т. д.), проверьте этот пакет npm: https://www.npmjs.com/package/@ion-phaser/ядро

Кроме того, вы можете использовать оболочку React этой библиотеки, чтобы легко использовать Фазер с компонентами React, поэтому вам не нужно напрямую манипулировать веб-компонентами, например:

import React from 'react'
import Phaser from 'phaser'
import { IonPhaser } from '@ion-phaser/react'

const game = {
  width: "100%",
  height: "100%",
  type: Phaser.AUTO,
  scene: {
    init: function() {
      this.cameras.main.setBackgroundColor('#24252A')
    },
    create: function() {
      this.helloWorld = this.add.text(
        this.cameras.main.centerX, 
        this.cameras.main.centerY, 
        "Hello World", { 
          font: "40px Arial", 
          fill: "#ffffff" 
        }
      );
      this.helloWorld.setOrigin(0.5);
    },
    update: function() {
      this.helloWorld.angle += 1;
    }
  }
}

const App = () => {
  return (
    <IonPhaser game = {game} />
  )
}

export default App;

Для получения более подробной информации проверьте репо: https://github.com/proyecto26/ion-phaser/tree/master/реагировать

Вам нужно положить изображения в папку публичный!

Другие вопросы по теме