web-dev-qa-db-fra.com

Puis-je créer des jeux interactifs 3D ou 2D en utilisant React Native?

React exécute un moteur JS V8 pour créer l'interface utilisateur en natif. Il peut évidemment s'accrocher à la bibliothèque native d'OpenGL mais pouvons-nous réellement construire des jeux performants en utilisant React Native?

21
Sanket Sahu

Oui, cela peut être fait et les performances semblent assez soignées.

Voici une vidéo qui démontre la même chose pour iOS: A Quick React Native Demo with OpenGL

OpenGL pour Android peut également être connecté de la même manière.

11
Sanket Sahu

Vous devriez jeter un œil à Expo et à son composant GLView , qui s'interface avec l'interface OpenGL native mais l'expose à l'aide d'une API de type WebGL.

Vous pouvez même utiliser Three.js avec cela, en utilisant la bibliothèque expo-three (qui est approximative sur les bords, mais suffisamment simple pour que vous puissiez la modifier selon vos besoins). Mais vraiment, puisque vous avez accès à l'objet gl WebGL, vous pouvez utiliser n'importe quelle lib js qui utilise WebGL.

2
Ulysse Mizrahi

Cela dépend vraiment du type de jeu que vous allez créer. J'ai reconstruit mon jeu de puzzle sans programme d'Obj-C à React Native, et après avoir fait des efforts pour l'optimisation (éliminer les rendus redondants, utiliser moins de composants et utiliser l'API animée) dans la mesure du possible), la performance en RN était juste bonne comme Obj-C.

Cependant, il s'agit d'un jeu de puzzle 2D qui n'utilise aucun type de rendu sophistiqué - c'est juste une grille avec des chiffres et quelques animations simples. Je noterai également que j'ai dû écrire la grille elle-même en code natif, car cela générerait jusqu'à 625 RN vues (pour un 25x25) et cela vient de tuer les performances lors du rendu.

En conclusion, RN sans bibliothèques externes est bien pour les jeux 2D plus simples comme les puzzles, mais j'hésiterais à l'utiliser pour quelque chose comme un jeu de plateforme, d'action ou de jeu 3D - ce n'est tout simplement pas fait pour ça.

2
Arman