J'ai commencé à créer de petits jeux en Java et j'envisage d'apprendre le C # pour un projet plus important. J'aimerais beaucoup faire un jeu moddable, mais quelqu'un m'a dit que je dois m'en tenir à Java si je veux que le jeu soit moddable, bien que je ne comprenne pas pourquoi.
Alors, quelles caractéristiques du langage de programmation rendent un langage plus adapté aux jeux modifiables?
Réponses:
Cela dépend de la façon dont vous souhaitez concevoir votre système de mod. J'en explorerai deux.
SDK
Très probablement, vous aurez besoin que vos moddeurs utilisent le même langage que vous, et chargent les mods via la réflexion (ou similaire, selon la langue de votre choix). Cela vous limitera évidemment aux langages qui peuvent faire une liaison tardive - et il y en a beaucoup qui peuvent le faire (même C peut faire une liaison tardive avec une astuce intelligente
LoadLibrary
). Vous pourriez même faire du méta-modding, où un mod pourrait héberger d'autres mods (par exemple des mods scriptés).Le premier problème avec cette approche est de cacher l'état interne. En prenant C # par exemple, un modder pourrait simplement utiliser la réflexion pour accéder aux membres privés, C peut également le faire (bien que plus d'efforts soient nécessaires).
Le deuxième problème est l'hébergement. Les gens n'aiment pas vraiment le code étranger exécuté sur leur système sans bac à sable en place. Dans le pire des cas, vous pourriez écrire un mod qui configure une boîte de départ; s'il était installé chez un FAI, cela pourrait nuire gravement à sa réputation.
Scripting
Les moddeurs utiliseraient un langage tel que Lua pour créer des mods. Vous auriez soit besoin d'un langage qui pourrait invoquer du code natif (pour interfacer avec Lua); ou vous devrez écrire votre propre langage de script dans la langue de votre choix.
Le premier problème ici est que la plupart des langages de script sont interprétés, ce qui peut ne pas être acceptable pour les systèmes en temps réel (bien que, voir LuaJIT); comme les jeux.
Ironiquement, le deuxième problème existe toujours ici; en prenant Lua comme exemple, j'ai été extrêmement déçu de voir que les fonctions de `` décorticage '' sont incluses dans la bibliothèque principale / par défaut - ce qui le rend entièrement inutile en tant qu'environnement bac à sable (sans beaucoup d'efforts, de chance et de maintenance), il est difficile de dépeindre à quel point je suis en colère à ce sujet, mais j'espère vraiment qu'ils buvaient des cocktails forts lorsqu'ils ont inclus ces anti-fonctionnalités . Vous pouvez évidemment facilement éviter cela si vous utilisez votre propre langage (voir: UnrealScript).
Enfin, le coût de l'interaction avec un moteur de script peut être prohibitif - en prenant à nouveau l'exemple de Lua, combiné avec C #: C # a un surdébit substantiel lors de l'appel de fonctions natives (via P / Invoke) et Lua est une API assez `` bavarde ''. Cela pourrait entraîner des problèmes si la façon dont vous concevez le `` SDK de script '' nécessite beaucoup de discussions entre votre langage principal et votre langage de script (notez que C n'a pas vraiment ce problème). Encore une fois, vous pouvez éviter cela en écrivant votre propre langage de script (et dans le cas de C # le compilant en MSIL) et en l'exécutant de la manière la plus rapide sous votre environnement [virtuel].
Étant donné que le script s'exécute essentiellement sur un système complètement différent de votre code principal, vous pouvez contrôler entièrement l'accès à l'état interne (à moins qu'ils ne fassent des choses fantaisistes avec les fonctions shell mentionnées précédemment).
Conclusion
J'ai un peu dépassé le sujet, cependant, ce que vous pouvez essentiellement tirer de ce mur de texte, c'est que vous devriez pouvoir faire un jeu moddable dans n'importe quelle langue (j'oserais dire que vous le pouvez ) - mais dans certaines langues peut conduire à plus de travail. Suis-je un peu anal à propos de la sécurité? Oui, vous devriez l'être aussi en ce qui concerne le code utilisateur.
la source
Je dirais que le langage n'est pas vraiment un facteur décisif ici, c'est vraiment à quel point vous êtes flexible et piloté par les données pour créer votre jeu qui le définit.
Chaque jeu fonctionne sur un ensemble de données (par exemple, tout, depuis les niveaux, les maillages, les configurations, les éléments). La différence entre un jeu normal et un jeu modifiable est que ce dernier fournit des outils qui permettent à l'utilisateur de modifier les données existantes (ou d'ajouter ses propres données). Quelle que soit la langue que vous choisissez, essayez simplement de rendre votre jeu aussi axé sur les données que possible et évitez de coder en dur le contenu du jeu. Pratiquement n'importe quelle langue que vous choisiriez peut lire les données du disque, ce qui est la plupart de ce dont vous avez besoin.
Il est également à mi-chemin si vous créez simplement les outils pour votre usage personnel (par exemple, votre propre éditeur de niveau), puis les perfectionnez et les partagez avec vos utilisateurs. L' éditeur de niveau Super Meat Boy était à peu près cela, une version améliorée de l'outil utilisé pendant le développement du jeu.
Et selon le type de jeu, vous souhaiterez peut-être autoriser les utilisateurs à scripter certains comportements du jeu. Dans ce cas, vous devriez envisager d'incorporer un langage de script dans votre jeu depuis le début (soit le vôtre, soit un langage existant comme Lua ou Python qui sont des choix populaires). Cela relève également de la catégorie de la conception basée sur les données. Si vous décidez d'utiliser un langage de script existant, il peut être utile de vérifier si le langage de programmation de votre choix possède des liaisons pour ce langage de script (généralement sous la forme de bibliothèques tierces).
la source
La langue que vous choisissez ne détermine pas vraiment à quel point un jeu est modifiable, la façon dont vous utilisez la langue est plus importante.
Si la plupart de votre jeu est basé sur des données (c'est-à-dire que les données du jeu sont définies dans un fichier qui est lu à partir de votre code), le jeu peut être très modifiable. Cela peut être fait dans presque toutes les langues. L'utilisation d'un langage de script facilite également la modification d'un jeu.
Cependant, cela ne signifie pas automatiquement que le fait de ne pas utiliser ces éléments rend impossible la modification d'un jeu. Minecraft par exemple n'est pas du tout un jeu très moddable, mais il existe de très bons décompilateurs disponibles pour Java et une très grande communauté pour Minecraft, donc de nombreux outils ont été créés pour rendre Minecraft moddable (divers modloaders, Bukkit). Avec ces outils, il est possible de modifier Minecraft (mais ils sont probablement techniquement illégaux dans certains pays).
Le meilleur conseil que je puisse vous donner est d'utiliser les outils que vous souhaitez que les moddeurs utilisent; Si vous définissez un PNJ à partir d'un fichier, il peut être modifié, si vous le cas particulier dans le code, il ne peut probablement pas l'être.
la source
Java est parfaitement adapté à l'écriture d'un jeu modifiable.
Cela dit, la meilleure façon de rendre un jeu modifiable est généralement d'adopter un langage dynamique qui peut être intégré dans l'application plus large et utilisé pour les scripts. Vous voulez généralement un langage dynamique, car il s'agit de pouvoir interagir avec le code au moment de l'exécution, sans passer par un cycle complet de compilation / génération / test.
Quelques choix de langues dynamiques à considérer:
la source
Il existe un moyen plus simple de le faire en java bien que ce soit un peu bâclé. Tout ce que vous avez à faire est de prendre les fichiers dot java dans un dossier puis de mettre ce fichier batch avec le dossier, nommez-le Run:
javac /src/.java Java / src /
Remarque: vous pouvez ajouter autant de classes que vous le souhaitez. Remarque: Dans la dernière ligne, assurez-vous de ne PAS mettre d'extensions alias .java, .exe, .bat, ect.
Cela va simplement recompiler le code chaque fois que le jeu est exécuté, donc si la source du jeu est modifiée, il le compilera puis exécutera le nouveau jeu compilé ... Malheureusement, vous ne pouvez pas ajouter de mods d'autres personnes dans le jeu.
la source