Heim > Backend-Entwicklung > PHP-Tutorial > Spielentwicklung mit React und PHP: Wie kompatibel sind sie?

Spielentwicklung mit React und PHP: Wie kompatibel sind sie?

William Shakespeare
Freigeben: 2025-02-09 11:42:11
Original
654 Leute haben es durchsucht

Game Development with React and PHP: How Compatible Are They?

Kernpunkte

  • Verwenden Sie React und PHP, um Spiele gemeinsam zu entwickeln.
  • Der Setup-Prozess der Spieleentwicklung umfasst das Einrichten eines asynchronen PHP-Servers, die Verwendung von Laravel-Mix in Nicht-Laravel-Projekten sowie die Verwendung von Websockets zum Verbinden von Backends und Frontends.
  • Aerys -Bibliothek kann in den Teilen HTTP und WebSocket einer Anwendung verwendet werden, die hohe Parallelität und Websockets unterstützt.
  • Laravel-Mix kann auch bei Nicht-Laravel-Projekten zum Erstellen von ReactJS-Dateien verwendet werden. Er bietet eine einfache Möglichkeit, die Build-Kette zu konfigurieren und zu erweitern.
  • Websockets können zum Verbinden von Backends und Frontends verwendet werden, sodass die Echtzeitkommunikation zwischen Servern und Clients ermöglicht.

Ich habe von dem Moment an, als ich beschloss, ein Spiel mit PHP und zu reagieren, darüber nachzudenken. "Ich möchte ein Multiplayer-Wirtschaftsspiel erstellen, ähnlich wie bei Stredew Valley, ohne Inhalte zu treffen und ein playergetriebenes Wirtschaftssystem zu haben." System ist unwissend.

Game Development with React and PHP: How Compatible Are They?

Ich bin mir nicht einmal sicher, ob ich genug reagieren kann, um es zu rechtfertigen. Ich meine, meine anfängliche Schnittstelle - ich habe mich sehr auf die Wirtschaftlichkeit von Servern und Spielen konzentriert - ist perfekt für React. Aber was, wenn ich anfange, den landwirtschaftlichen/interaktiven Aspekt der Dinge zu machen? Ich mag die Idee, isometrische Schnittstellen rund um Wirtschaftssysteme aufzubauen.

Ich habe eine Rede von Dead_lugosi gesehen, die den Prozess des Aufbaus eines mittelalterlichen Spiels mit PHP beschrieb. Margaret hat mich inspiriert, und diese Rede war einer der Gründe, warum ich ein Buch über JS -Spielentwicklung geschrieben habe. Ich bin entschlossen, meine Erfahrungen aufzuschreiben. Vielleicht können andere auch aus meinen Fehlern lernen.


(Der Code für diesen Teil finden Sie unter: github.com/assertchris-tutorials/sitepoint-making-names/tree/Part-1. Ich habe ihn in PHP 7.1 und die neueste Version von Google abgestimmt Chrom wurde es getestet


Back-End-Einstellungen

Ich habe zuerst nach Anleitungen zum Aufbau eines mehrpersonen Wirtschaftssystems gesucht. Ich fand einen ausgezeichneten Stapel -Überlaufbeitrag, in dem die Leute verschiedene Dinge erklären, die zu berücksichtigen sind. Ich war auf halbem Weg, bevor mir klar wurde, dass ich vielleicht am falschen Ort angefangen hätte. "Erstens: Ich brauche einen PHP -Server. Ich habe eine Reihe von React -Clients, also möchte ich etwas, das mit hoher Parallelität (und vielleicht sogar Websockets) umgehen kann. Es muss anhaltend sein: Dinge müssen sein, auch wenn der Spieler ist nicht online

Ich habe angefangen, einen asynchronen PHP -Server einzurichten - um eine hohe Parallelität zu verarbeiten und Websockets zu unterstützen. Ich fügte meine kürzliche Arbeit mit PHP -Präprozessor hinzu, um die Dinge klarer zu machen, und erstellte die ersten Endpunkte.

von

:

$host = new Aerys\Host();
$host->expose("*", 8080);

$host->use($router = Aerys\router());
$host->use($root = Aerys\root(.."/public"));

$web = process .."/routes/web.pre";
$web($router);

$api = process .."/routes/api.pre";
$api($router);
Nach dem Login kopieren
Nach dem Login kopieren

Ich habe beschlossen, Aerys für die HTTP- und WebSocket -Teile der Anwendung zu verwenden. Dieser Code sieht ganz anders aus als die Aerys -Dokumentation, aber das liegt daran, dass ich ein gutes Verständnis dafür habe, was ich brauche.

Der übliche Prozess des Ausführens einer Aerys -Anwendung besteht darin, einen Befehl wie diesen zu verwenden:

vendor/bin/aerys -d -c config.php
Nach dem Login kopieren
Nach dem Login kopieren

Es gibt viel Code zu wiederholen, und es wird nicht mit der Tatsache handhaben, dass ich mit PHP vorbereiten möchte. Ich habe eine Loader -Datei erstellt.

von loader.php:

return Pre\processAndRequire(__DIR__ . "/config.pre");
Nach dem Login kopieren
Nach dem Login kopieren

Dann habe ich meine Abhängigkeiten installiert. Dies ist von composer.json:

"require": {
  "amphp/aerys": "dev-amp_v2",
  "amphp/parallel": "dev-master",
  "league/container": "^2.2",
  "league/plates": "^3.3",
  "pre/short-closures": "^0.4.0"
},
"require-dev": {
  "phpunit/phpunit": "^6.0"
},
Nach dem Login kopieren
Nach dem Login kopieren

Ich möchte amphp/parallel verwenden, um den Blockierungscode aus dem asynchronen Server zu verschieben, aber er kann nicht mit dem stabilen Tag von amphp/aerys installiert werden. Deshalb benutze ich den dev-amp_v2 -Ast.

Ich denke, es ist eine gute Idee, eine Art Template -Engine und Service -Locator aufzunehmen. Ich habe jede Version der PHP League ausgewählt. Schließlich habe ich pre/short-closures hinzugefügt, die sowohl zum Umgang mit der benutzerdefinierten Syntax in config.pre als auch zu den kurzen Schließungen verwendet wird, die ich später verwenden möchte ...

Dann habe ich angefangen, die Routing -Datei zu erstellen. Von routes/web.pre:

use Aerys\Router;
use App\Action\HomeAction;

return (Router $router) => {
  $router->route(
    "GET", "/", new HomeAction
  );
};
Nach dem Login kopieren
Nach dem Login kopieren

und von routes/api.pre:

use Aerys\Router;
use App\Action\Api\HomeAction;

return (Router $router) => {
  $router->route(
    "GET", "/api", new HomeAction
  );
};
Nach dem Login kopieren
Nach dem Login kopieren

Obwohl es sich um eine einfache Route handelt, hilft mir dies, den Code in config.pre zu testen. Ich habe beschlossen, dass diese Routing -Dateien zu Schließungen zurückkehren, damit ich ihnen einen typisierten $router übergeben konnte, zu dem sie ihre eigenen Routen hinzufügen können. Schließlich habe ich zwei (ähnliche) Operationen erstellt.

von app/Actions/HomeAction.pre:

namespace App\Action;

use Aerys\Request;
use Aerys\Response;

class HomeAction
{
  public function __invoke(Request $request,
    Response $response)
  {
    $response->end("hello world");
  }
}
Nach dem Login kopieren
Nach dem Login kopieren

Die letzte Note besteht darin, Verknüpfungsskripte hinzuzufügen, um die Entwicklungs- und Produktionsversion des Aerys -Servers zu starten.

von composer.json:

"scripts": {
  "dev": "vendor/bin/aerys -d -c loader.php",
  "prod": "vendor/bin/aerys -c loader.php"
},
"config": {
  "process-timeout": 0
},
Nach dem Login kopieren
Nach dem Login kopieren

Nach all dem kann ich einen neuen Server starten und auf http://127.0.0.1:8080 zugreifen, indem ich den folgenden Befehl eingreift:

composer dev
Nach dem Login kopieren

Front-End-Einstellungen

"Okay, jetzt, wo ich die Dinge auf der PHP -Seite relativ stabil gemacht habe; wie erstelle ich eine Reactjs -Datei? Vielleicht kann ich Laravel Mix verwenden ...?"

Ich möchte nicht wirklich eine brandneue Build-Kette erstellen, und Mix wurde auch umgebaut, um in Nicht-Laravel-Projekten gut zu arbeiten. Während Konfiguration und Erweiterungen relativ einfach sind, ist sie standardmäßig mehr VueJS-orientiert.

Das erste, was ich tun muss, ist einige NPM -Abhängigkeiten zu installieren. Von package.json:

"devDependencies": {
  "babel-preset-react": "^6.23.0",
  "bootstrap-sass": "^3.3.7",
  "jquery": "^3.1.1",
  "laravel-mix": "^0.7.5",
  "react": "^15.4.2",
  "react-dom": "^15.4.2",
  "webpack": "^2.2.1"
},
Nach dem Login kopieren

mix verwendet Webpack, um JS- und CSS -Dateien vorzuprobieren und zu bündeln. Ich muss auch React und verwandte Babel -Bibliotheken installieren, um JSX -Dateien zu erstellen. Schließlich habe ich die Bootstrap -Datei hinzugefügt, um einige Standardstile zu erhalten.

lädt automatisch benutzerdefinierte Konfigurationsdateien, sodass ich Folgendes hinzugefügt habe. Von webpack.mix.js:

let mix = require("laravel-mix")

// load babel presets for jsx files

mix.webpackConfig({
  "module": {
    "rules": [
      {
        "test": /jsx$/,
        "exclude": /(node_modules)/,
        "loader": "babel-loader" + mix.config.babelConfig(),
        "query": {
          "presets": [
            "react",
            "es2015",
          ],
        },
      },
    ],
  },
})

// set up front-end assets

mix.setPublicPath("public")

mix.js("assets/js/app.jsx", "public/js/app.js")
mix.sass("assets/scss/app.scss", "public/css/app.css")
mix.version()
Nach dem Login kopieren

Ich muss mit Mix mitteilen, wie Sie JSX -Dateien verarbeiten, daher habe ich dieselbe Konfiguration wie diejenigen hinzugefügt, die normalerweise in .babelrc platziert sind. Ich habe vor, einen einzelnen JS- und CSS -Einstiegspunkt in verschiedene Teile der Anwendung zu erhalten.

Hinweis: Zukünftige Versionen von Mix haben integrierte Unterstützung für den Bau von ReactJs-Vermögenswerten. Zu diesem Zeitpunkt kann der Code mix.webpackConfig gelöscht werden.

Ich habe noch einmal einige Verknüpfungsskripte erstellt, um eine Menge Tipparbeiten zu speichern. Von package.json:

$host = new Aerys\Host();
$host->expose("*", 8080);

$host->use($router = Aerys\router());
$host->use($root = Aerys\root(.."/public"));

$web = process .."/routes/web.pre";
$web($router);

$api = process .."/routes/api.pre";
$api($router);
Nach dem Login kopieren
Nach dem Login kopieren

Alle drei Skripte verwenden Webpack -Variablenbefehle, unterscheiden sich jedoch in ihren Operationen. dev Erstellen Sie Debug -Versionen von JS- und CSS -Dateien. Der -w Switch startet den Webpack -Monitor (damit das Bundle teilweise umgebaut werden kann). Der -p Switch ermöglicht eine optimierte Produktionsversion des Bundle.

Da ich eine gebündelte Versionskontrolle verwende, muss ich eine Möglichkeit, eine Datei wie /js/app.60795d5b3951178abba1.js zu verweisen, ohne den Hash -Wert zu kennen. Mir ist aufgefallen, dass Mix Manifestdateien erstellt, also habe ich eine Helferfunktion erstellt, um sie abzufragen. Von helpers.pre:

vendor/bin/aerys -d -c config.php
Nach dem Login kopieren
Nach dem Login kopieren

aerys weiß, wie man Versprechungen umgeht, wenn sie in Form von $val = yield $promise erscheinen. Deshalb habe ich die Implementierung von AMPs Versprechen verwendet. Nachdem ich die Datei gelesen und dekodiert habe, kann ich den passenden Dateipfad finden. Ich habe HomeAction angepasst. Von app/Actions/HomeAction.pre:

return Pre\processAndRequire(__DIR__ . "/config.pre");
Nach dem Login kopieren
Nach dem Login kopieren

Ich habe festgestellt, dass ich weiterhin Funktionen erstellen konnte, die Versprechen zurückgeben, und sie auf diese Weise verwenden, um den Code asynchron zu halten. Dies ist mein JS -Code von assets/js/component.jsx:

"require": {
  "amphp/aerys": "dev-amp_v2",
  "amphp/parallel": "dev-master",
  "league/container": "^2.2",
  "league/plates": "^3.3",
  "pre/short-closures": "^0.4.0"
},
"require-dev": {
  "phpunit/phpunit": "^6.0"
},
Nach dem Login kopieren
Nach dem Login kopieren

… und aus assets/js/app.jsx:

use Aerys\Router;
use App\Action\HomeAction;

return (Router $router) => {
  $router->route(
    "GET", "/", new HomeAction
  );
};
Nach dem Login kopieren
Nach dem Login kopieren

schließlich möchte ich nur sehen, ob Mix meine JSX -Dateien kompiliert und ob ich sie mit der asynchronisierten Funktion erneut finden kann. Es stellt sich heraus, dass es funktioniert! mix

Hinweis: Die Verwendung der Funktion jedes Mal ist teuer, insbesondere wenn wir dieselbe Datei laden. Stattdessen können wir alle Vorlagen während der Server -Boot -Phase laden und sie bei Bedarf aus dem Betrieb verweisen. Die Konfigurationsdatei, die Aerys starten, kann ein Versprechen zurückgeben (z. mix Amp\all

Verbinden Sie mit WebSockets

Ich habe es fast eingerichtet. Das Letzte ist, das Backend und Frontend über WebSockets zu verbinden. Ich fand dies relativ einfach mit einer neuen Klasse. Von

:

app/Socket/GameSocket.pre

… und geringfügige Änderungen an Webrouting (aus
use Aerys\Router;
use App\Action\Api\HomeAction;

return (Router $router) => {
  $router->route(
    "GET", "/api", new HomeAction
  );
};
Nach dem Login kopieren
Nach dem Login kopieren
):

routes/web.pre

Jetzt kann ich die JS ändern, um eine Verbindung zu diesem Websocket herzustellen und die Nachricht an alle, die damit verbunden sind, zu senden. Von
namespace App\Action;

use Aerys\Request;
use Aerys\Response;

class HomeAction
{
  public function __invoke(Request $request,
    Response $response)
  {
    $response->end("hello world");
  }
}
Nach dem Login kopieren
Nach dem Login kopieren
:

assets/js/component.jsx

Wenn ich ein neues
"scripts": {
  "dev": "vendor/bin/aerys -d -c loader.php",
  "prod": "vendor/bin/aerys -c loader.php"
},
"config": {
  "process-timeout": 0
},
Nach dem Login kopieren
Nach dem Login kopieren
Objekt erstelle, stellt es eine Verbindung zum WebSocket -Server her und fügt einen Ereignishörer für die neue Nachricht hinzu. Ich habe einige Debugging -Code hinzugefügt - um sicherzustellen, dass er korrekt eine Verbindung herstellt und neue Nachrichten sendet.

Component wir werden später auf PHP und Websockets detaillierter eingehen, mach dir keine Sorgen.

Zusammenfassung

In diesem Abschnitt haben wir uns angesehen, wie ein einfacher asynchroner PHP-Webserver eingerichtet wird, wie man Laravel-Mix in Nicht-Laravel-Projekten verwendet und sogar wie das Backend und Frontend mithilfe von Websockets miteinander verbindet.

wow! Es deckt viele Inhalte ab und wir haben noch keine Reihe von Spielcode geschrieben. Machen Sie sich mir im zweiten Teil mit und wir werden die Spiellogik erstellen und reagieren.

(Dieser Artikel wurde von Niklas Keller geprüft. Dank aller Peer -Rezensenten von Sitepoint, um den Inhalt von SitePoint für das Beste zu bringen!)

FAQ für die Spielentwicklung mit ReactJs und PHP

Wie ist Reactjs und PHP -Kompatibilität in der Spielentwicklung?

reactjs und PHP sind in der Spielentwicklung sehr kompatibel. ReactJS ist eine JavaScript-Bibliothek, die ideal zum Erstellen von Benutzeroberflächen ist, insbesondere für einseitige Anwendungen. Es ermöglicht schnelles und reaktionsschnelles Webdesign. Andererseits ist PHP eine serverseitige Skriptsprache, die für die Back-End-Entwicklung sehr geeignet ist. Es kann Datenbank, Benutzerauthentifizierung und serverseitige Logik verarbeiten. ReactJs kann zusammen mit dem Front-End verarbeiten, dynamische und interaktive Benutzeroberflächen erstellen, während PHP das Back-End verwaltet.

Kann ich PHP für Spiellogik in ReactJS -Spielen verwenden?

Ja, Sie können PHP für die Spiellogik in Reactjs -Spielen verwenden. Obwohl ReactJS die Benutzeroberfläche übernimmt, kann PHP die Spiellogik auf der Serverseite verwalten. Dies beinhaltet die Verarbeitung von Daten, die Verwaltung von Benutzersitzungen und die Steuerung der Spielregeln. Diese Trennung von Bedenken ermöglicht einen geordneten und effizienteren Entwicklungsprozess.

Was sind die Vorteile der Verwendung von ReactJs für die Spieleentwicklung?

reactjs bietet viele Vorteile für die Spielentwicklung. Sein virtuelles DOM ermöglicht effiziente Updates und Rendering, wodurch das Spiel glatter ist. Es unterstützt auch wiederverwendbare Komponenten, die die Entwicklungszeit erheblich beschleunigen können. Darüber hinaus verfügt ReactJS über eine große Gemeinschaft und eine reichhaltige Ressourcen, um Lösungen für Probleme zu finden oder neue Technologien zu lernen.

Was sind die Vorteile der Verwendung von PHP für die Spielentwicklung?

PHP hat viele Vorteile in der Spielentwicklung. Es handelt sich um eine serverseitige Sprache, was bedeutet, dass die Datenverwaltung, die Benutzerauthentifizierung und die serverseitige Spiellogik verarbeitet werden kann. PHP ist auch leicht zu lernen, hat eine einfache Syntax und eine riesige Entwicklergemeinschaft. Es ist auch sehr skalierbar, was es für Spiele geeignet ist, für die möglicherweise eine große Anzahl von Benutzern behandelt wird.

Wie kann man Spiele mit ReactJs und PHP entwickeln?

Um Spiele mit ReactJs und PHP zu entwickeln, müssen Sie zunächst die Grundlagen beider Sprachen lernen. Es stehen viele Online -Ressourcen und Tutorials zur Verfügung. Sobald Sie mit diesen Sprachen vertraut sind, können Sie zunächst ein einfaches Spiel erstellen. Dies kann ein grundlegendes Textspiel oder ein einfaches Puzzlespiel sein. Wenn Sie mehr Erfahrung sammeln, können Sie komplexere Spiele aufbauen.

Welche Ressourcen oder Bibliotheken gibt es bei der Spieleentwicklung mit ReactJs und PHP?

Ja, es gibt mehrere Ressourcen und Bibliotheken, die mit ReactJs und PHP bei der Spielentwicklung helfen können. Für ReactJs sind Bibliotheken wie React Game Kit und React Game Engine sehr nützlich. Für PHP finden Sie möglicherweise Bibliotheken wie PHP-SDL oder Wyvern nützlich. Darüber hinaus gibt es viele Tutorials, Führer und Foren online, in denen Sie mehr erfahren und Hilfe erhalten können.

Kann ich Multiplayer -Spiele mit ReactJs und PHP erstellen?

Ja, Sie können Multiplayer -Spiele mit ReactJs und PHP erstellen. ReactJs können Benutzeroberflächen verarbeiten, während PHP die serverseitige Logik verwalten kann, einschließlich der Verwaltung von Player-Sitzungen und der Synchronisierung des Spielstatus über mehrere Clients hinweg.

Welche Art von Spiel kann ich mit ReactJs und PHP bauen?

Mit ReactJs und PHP können Sie eine Vielzahl von Spielen erstellen. Dies beinhaltet einfache Textspiele, Puzzlespiele, Plattformspiele, Rollenspiele und sogar Multiplayer-Online-Spiele. Die Möglichkeiten sind enorm und die Grenze ist eigentlich Ihre Vorstellungskraft und Ihre Fähigkeiten.

Wie verarbeitet man Daten in einem Spiel, das mit ReactJs und PHP entwickelt wurde?

In einem Spiel, das mit ReactJs und PHP entwickelt wurde, kann der serverseitige PHP zum Verarbeiten von Daten verwendet werden. Dies kann Spielerdaten, Spielstatus, Punktzahlen usw. umfassen. Diese Daten können in einer Datenbank gespeichert und mit dieser Datenbank mithilfe von PHP interagiert werden, um die Daten nach Bedarf abzurufen und zu aktualisieren.

Wie verarbeitet man Benutzereingaben in einem Spiel, das mit ReactJs entwickelt wurde?

In einem mit ReactJS entwickelten Spiel kann die Benutzereingabe mithilfe von React's Ereignisverarbeitungssystem verarbeitet werden. Dies kann Mausklicks, Tastaturtasten und Berührungsereignisse umfassen. Das Ereignisverarbeitungssystem von React ist leistungsstark und flexibel, sodass Sie leicht steuern können, wie das Spiel auf Benutzereingaben reagiert.

Das obige ist der detaillierte Inhalt vonSpielentwicklung mit React und PHP: Wie kompatibel sind sie?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage