Dans les articles de Creator Spotlight, nous invitons les utilisateurs de Defold à se présenter et à partager une partie de leurs antécédents, de leur travail et des choses qui les inspirent. C’est une excellente occasion pour la communauté de se réunir, de reconnaître les réalisations et de partager certains des excellents travaux des utilisateurs de Defold.

Dans ce projecteur sur Defold Creator, nous avons invité Adam Engebretson à nous parler un peu de lui-même et de ses derniers projets Defold.

Quel est ton nom?

👋 Bonjour, je m’appelle Adam Engebretson.

Quel est ton parcours

Après avoir dépensé beaucoup trop d’argent pour mon baccalauréat en chimie biologique, j’ai décidé de devenir développeur Web indépendant. Cela a commencé comme un simple hébergement WordPress pour petites entreprises, puis s’est rapidement transformé en projets avec AAA et David Letterman. J’ai ensuite été embauché par une petite société de logiciels médicaux et j’ai élargi mon CV en tant qu’ingénieur full stack avec des langages Web ennuyeux comme HTML, CSS, JS et PHP.

Mes priorités de travail se sont ensuite déplacées vers un logiciel exécuté directement sur les postes de travail, et j’ai décidé d’apprendre Golang. Je n’ai pas regardé en arrière sur PHP depuis lors. L’aspect le plus important de cette transition était l’apprentissage de la différence fonctionnelle entre les langages interprétés et compilés. Le système de types de Golang était un moyen fantastique pour moi de comprendre cette nouvelle (pour moi en tout cas) façon de programmer, car je n’étais exposé à aucun des langages à saveur C.

Vraiment fatigué d’écrire des logiciels B2B pour les utilisateurs finaux, je suis passé à un rôle DevOps où j’ai le luxe d’avoir mes collègues comme utilisateurs finaux. Mon équipe s’efforce de permettre à nos équipes techniques de livrer nos logiciels rapidement et efficacement. Cela inclut l’infrastructure en tant que code, l’intégration et la fourniture continues, et Kubernetes en tant que plate-forme d’infrastructure.

Quand et comment avez-vous découvert Defold?

Je ne me souviens pas avec certitude, mais c’est un article sur Reddit ou HackerNews qui m’a amené à ouvrir Defold.com sous forme d’onglet sur mon téléphone. Des semaines plus tard, je suis tombé sur ledit onglet ouvert et j’ai décidé de le vérifier!

[ Source: computercraft.info]

Qu’est-ce que vous aimez le plus chez Defold?

En tant que personne ayant une expérience dans le développement d’applications Web, le développement de jeux me semblait mystérieux et inaccessible. L’approche de Defold en matière d’adressage d’objets (Style d’URL / chemin) et de signalisation (msg.post ()) m’ont tout de suite eu du sens, et j’ai eu l’impression de pouvoir comprendre certains des concepts plus facilement que dans certains des autres moteurs de jeu que j’ai examinés.

« La syntaxe est incroyablement facile à apprendre et les API sont magnifiquement documentées. »

De plus, j’ai trouvé très facile de trouver Lua là-bas pour une poignée de Computercraftapplications liées. La syntaxe est facile à apprendre et les API sont magnifiquement documentées Defold.com. Suivre les guides de démarrage rapide et les projets de tutoriels a été un jeu d’enfant, et j’ai pu suivre la logique des exemples simples au point où ils sont devenus dangereux.

Je devrais aussi mentionner … Avant de me décider à plonger, j’ai remarqué ceci Articulation a été répertorié dans le Portail des actifs. Même si j’ai dit toutes les belles choses que j’ai dites à propos de Lua, je déteste Lua lol! Je suis gâté avec l’entrée statique et l’IDE Intellisense «ça marche juste» qui vient avec Golang. Je ne me sentirais pas du tout en sécurité dans mon code si je devais tout écrire en Lua. Sachant que je pourrais apprendre la plate-forme / les concepts en Lua rapidement et facilement, puis les réimplémenter dans un langage typé statiquement était le créateur de l’accord.

Sur quoi travaillez-vous actuellement?

Je suis une personne « moins que créative ». Je n’ai aucune compétence en conception et développer des idées de jeux n’est pas mon fort. Par conséquent, en tant qu’exercice d’apprentissage, j’essaie de réimplémenter Minecraft dans Defold avec l’aide de Haxe. Je vais probablement continuer à écrire du multijoueur faisant autorité sur le serveur (pour moi, c’est la partie la plus facile) aussi Nakama de Heroic Labs et ton Prise en charge du plugin Golang.

J’ai passé du temps à écrire un plugin de serveur Nakama dans Haxe, puis à le compiler en Lua, mais j’ai décidé de ne pas le faire car les types de Nakama sont déjà déclarés dans Golang et je devrais passer par le processus moi-même si je pouvais vouloir travailler dans Haxe.

Quelle est votre expérience avec Nakama? Avez-vous utilisé Nakama dans le passé?

Sur mon premier projet Defold, j’ai abordé une implémentation de serveur Nakama. C’était vraiment facile; Juste des gens qui se promènent sur un écran collectant des sprites de bière. Mon expérience avec les API backend en a fait une tâche triviale. Le Nakama Module serveur et Déplier le client (probablement désynchronisés) sont tous les deux sur GitHub.

Quelle est votre expérience avec Haxe?

Haxe me donne confiance en mon code. De plus, l’IDE Intellisense apporte l’API Defold à portée de main. Je tape juste GoMessages. Et l’EDI recommande automatiquement Acquise_Input_Focus. Saisie de Msg.post (me montre une info-bulle qui documente les arguments de la méthode. L’enregistrement de mes fichiers .hx supprime automatiquement le code et me montre où se trouvent mes erreurs de frappe.

« Mais avec Haxe, j’ai le sentiment d’avoir » débloqué le pouvoir « . »

Je peux également utiliser les fonctionnalités du langage Haxe pour accomplir artificiellement des choses qui ne semblent pas possibles en Lua (ou qui sont beaucoup plus difficiles ou que je suis stupide). Je parie que quelqu’un qui maîtrise mieux les implémentations de Lua pourrait commenter cela plus en détail, et peut-être que je manque une partie de la vue d’ensemble ici. Mais avec Haxe j’ai le sentiment d’avoir «déverrouillé le service».

À quoi ressemble le processus de développement lors de l’utilisation de Haxe avec Defold? Processus de construction, outils, ce genre de choses.

C’est vraiment assez facile à mettre en place, mais il m’a fallu un peu de temps pour m’habituer au compilateur Haxe. C’est juste un de mes artefacts dont Haxe n’était pas au courant avant ce procès.

  1. À installer Articulation:: brew install haxe
  2. À installer hxdefold:: haxelib git hxdefold https://github.com/hxdefold/hxdefold
  3. Initialisez hxdefold dans votre projet: haxelib run hxdefold init
  4. Cours haxe build.hxml
  5. Joindre le script généré scripts/Hello.script à votre objet de jeu

J’ai essayé d’en créer un hooks.editor_script Cela déclencherait la construction de Haxe au moment de la compilation, mais le moteur Defold semble charger celui généré app.lua Fichier avant que ces hooks ne soient appelés, vous devez donc compiler efficacement votre jeu deux fois pour voir vos modifications. Cependant, quelque chose me dit qu’il y aura bientôt une mise à jour qui fournira une solution à ce problème.

Non, je ne suis pas actif dans la communauté Haxe. Je viens juste de commencer à utiliser Haxe dans le cadre de Defold. Je suis vraiment venu pour apprécier la langue et trouver une application en dehors du développement de jeux, mais je suis juste plus efficace dans d’autres langues aujourd’hui.

De quelle partie de votre projet actuel êtes-vous le plus fier?

Je suis très fier de la confiance que j’ai dans mon code à chaque fois que je commence mon jeu. Cela ne veut pas dire que je suis convaincu de ma logique de jeu, mais c’est une conversation complètement différente (que je ne suis pas qualifié pour commenter lol).

Je sais que beaucoup de lecteurs pourraient dire quelque chose comme: « Eh bien, si vous voulez un langage typé statiquement, utilisez un moteur de jeu qui en utilise un. » Je pense que c’est un bon conseil. Cependant, j’ai déjà emprunté cette voie avec un succès minimal. Peut-être que maintenant que je comprends mieux Haxe, je serais plus efficace dans un langage à saveur C (j’ai remarqué des similitudes entre eux et j’ai certainement pu mieux interpréter le code à saveur C depuis l’apprentissage de Haxe). .

La réussite ici est l’approche de Defold envers les personnes qui sont nouvelles dans le développement de jeux, qu’elles aient ou non une expérience de codage. L’adressage des objets du jeu avec un identifiant d’url / chemin est génial, et le transfert de messages nommés est tellement flexible et facile à comprendre.

Quels objectifs et limites avez-vous fixés pour votre nouvelle implémentation Minecraft? Remettre en œuvre le tout serait une tâche monumentale!

J’espère juste apprendre. Au fur et à mesure que je progresse dans la mise en œuvre de Minecraft, je rencontre de nouveaux défis et décide de les relever un par un. Chaque «fonctionnalité» m’aide à comprendre un peu plus la conception de jeux, le développement de jeux et Defold lui-même!

Parlez-nous de votre plus laid hack pour faire un travail!

Je vais garder un œil sur la section commentaires pour une solution à son …

Puisque Haxe est un langage typé statiquement, vous devez considérer le type de la variable lorsque vous déclarez des variables. Dans mon cas d’utilisation, j’essaye d’appeler ça Buffer.create Méthode. Pour ma vie, je n’ai pas pu faire en sorte que le compilateur Haxe produise un type qu’il accepterait comme deuxième argument de cette méthode: lua.Table<Int, defold.BufferStreamDeclaration>. En fin de compte, j’ai pu dire à Haxe d’ignorer cette partie de mon code et de la traiter comme Vanilla Lua. La solution de contournement est la suivante:

var buf = Buffer.create(self.vertices.length, untyped __lua__('{
  { name = hash("position"), type=buffer.VALUE_TYPE_FLOAT32, count = 3 },
  { name = hash("normal"), type=buffer.VALUE_TYPE_FLOAT32, count = 3 },
  { name = hash("texcoord0"), type=buffer.VALUE_TYPE_FLOAT32, count = 2 }
}'));
var pos = Buffer.get_stream(buf, "position");
var nor = Buffer.get_stream(buf, "normal");
var tex = Buffer.get_stream(buf, "texcoord0");

// do stuff to these streams to draw a mesh

var res:Hash = Go.get("#mesh", "vertices");
Resource.set_buffer(res, buf);

Puisque j’ai le temps de me pirater sur ce projet, je télécharge mon code GitHub et publier des mises à jour dans discorde. Cette conversation a commencé sur le canal #rendering, mais je vais flotter entre là-bas et #gamejams. Si vous avez de la chance, vous me surprendrez en streaming sur Voice 1.



Source link

Recent Posts