Jdev : Effet sinusoidale oldschool en Löve (sources incluses)

Bonjour tout le monde,

Aujourd’hui un billet un peu particulier. Après avoir fait joujou avec l’atelier du casse brique, je me suis plongé sur le portage d’un code que j’avais fait il y a longtemps, histoire de m’habituer aux tableaux et listes de Lua. C’est tellement particulier sur ce langage.

Je partage ce code avec vous ici, il s’agit de créer un effet oldschool sinusoïdale comme dans le temps quand on faisait des demos sur Atari ou autre. Je vous met le lien du zip qui contient les sources, et vous explique un petit peu le principe.

Voici les sources : Télécharger les sources

Voici une image (non animé du coup) :

Comment cela marche ?

Fonction love.load()

Dans la fonction « load »  on commence par charger notre image. Ensuite on initialise une variable que j’ai appelé startAngle, c’est l’angle de départ. On initialise également un tableau que j’ai appelé tableSin qu’on remplit avec des valeurs « sin ». Vu qu’un angle peut aller jusqu’à 360 degrés, le tableau aura 360 valeurs (de 0 à 359).

Aussi vous remarquerez que pour les besoins de l’algorithme je convertit l’angle de degrés en radians. En fait c’est tout simplement parce que à l’époque où j’avais codé cette routine, le langage utilisait que des radians. La routine est donc prévue comme cela.

je lance ensuite la fonction cutTheImage en donnant en paramètre notre source.

Fonction cutTheImage()

Dans cette fonction j’initialise un tableau qui va contenir une liste d’images. Ensuite la boucle for nous permet de découper dans le sens de la largeur des bandes de l’image de 612 pixel de large et de 1 de hauteur (les valeurs sont adaptées selon l’image choisie), l’indice va jusqu’à 100 qui représente la hauteur totale de l’image. Ensuite on remplit le tableau d’images (ou la liste si vous préférez) avec le résultat de la découpe.

Fonction love.update()

A chaque update on initialise l’angle courant. Au premier tour, l’angle de départ est à 0, et donc l’angle courant également (voir la fonction draw plus bas).

Fonction love.draw()

Le but de la fonction est d’afficher tour à tour chaque partie ou morceau de l’image qu’on a découpée. Souvenez vous on a stocké chaque partie lors de la découpe dans un tableau ou une liste. Dans la boucle for, on affiche l’image à la position y , à la coordonnée x et y indiquée. La position x est prise dans le tableau tableSin qu’on a initialisé au départ et qui contient des positions permettant de faire la sinusoïde, on va chercher la valeur à l’emplacement donné par la variable currentAngle, la coordonnée y est définit par la boucle for. En effet, on affiche chaque morceau de haut en bas.

Ensuite on ajoute 1 à currentAngle pour passer à la position suivante pour le prochain morceau d’image. Il faut tester qu’on dépasse pas 360 (logique pour un angle). Enfin on change l’angle de départ pour la prochaine frame en ajoutant 2 à startAngle. Etant donné que dans la fonction update, on met la valeur de currentAngle à startAngle, cela permet de faire un « déplacement » et donc de donner au final ce mouvement sinusoïdale.

Vous pouvez essayer : au lieu d’ajouter 2 à startAngle, ajoutez par ex 5 vous verrez que l’animation sera plus rapide. Aussi dans le calcul du tableau tableSin, changez la valeur 30 en 50 par ex, vous verrez que l’amplitude de l’effet sera plus grand.

Voilà j’espère que ce petit code vous aura plu et je vous dis à très bientôt sur GameCodeur !

Happy coding !

Journal d’un dev de « crystal »

Bonjour à toutes et à tous,

J’ai franchis le pas et je suis dorénavant comme beaucoup d’entre vous membre premium. Cet article est un peu l’introduction à un exercice que je me suis donné en entrant ici : partager mon avancement, mes échecs, mes craintes, mes réussites, mes difficultés. Appelons cela un journal de dev ou « Jdev ». Quel drôle d’idée me diriez vous ?

Un bug dans mon esprit ?

En réalité, je ne suis pas complètement nouveau dans le développement. Je m’intéresse au développement de jeu depuis longtemps. Cependant je suis ennuyé par point : Je ne suis pas productif ! Pas bien le Crystal !

En fait ceci est l’oeuvre d’un phénomène particulier : j’aime bien tout tester, en soif d’apprendre, je ne compte plus les livres sur le développement de jeu, sur plusieurs langages / engines que j’ai. Et pourtant je ne fais rien de concret. Je commence à coder/créer sur un langage, au bout d’un moment j’ai besoin de voir un autre langage / engine, de voir du neuf, ou d’essayer autre chose.Résultat : rien de concret à part un ou deux petits moteurs.

C’est ainsi que je me suis essayé à la libGDX, Game Maker Studio (1 et 2), Clickteam Fusion 2.5, Purebasic, GLBasic, Construct (1 et 2) et j’ en passe. Et pourtant…

Il y a quand même quelque chose de positif la dedans : Je prend un réel plaisir à tester ces langages / engines, à coder, créer. Maintenant j’aimerais pouvoir moins m’égarer et faire quelque chose tout en continuant d’apprendre.

Qu’est ce que j’attends de GameCodeur ?

Apprendre encore plus bien sur. Mais j’ai un tout autre objectif : Essayer de me focaliser et de faire quelque chose de concret sans avoir de blocage quelconque, mon esprit se pose beaucoup trop de questions !

Par ex les graphismes sont un problème chez moi, et souvent je suis jamais allé bien loin, car regarder un carré sauter cela m’a jamais fait vibrer, mais j’avais surement tord. L’idée est donc de faire un travail de code certes mais aussi (du moins en ce qui me concerne) un travail de fond. Essayer d’aller jusqu’au bout de quelque chose et surtout, partagez avec vous et via ce blog mes sentiments, mes difficultés, mes réussites et pourquoi pas mes astuces. Et surtout éviter de me poser trop de question et d’avoir toujours ce besoin d’avoir une réponse (même quand il n’en n’existe pas…).

Je pense que partager de cette manière aide à se fixer un objectif, à se défouler (d’une certaines manières) et à se motiver !

Sur quoi vais je coder alors ?

Vous commencez à me connaître, me focaliser sur un seul langage ou engine va m’être difficile, alors je pense que je vais tout simplement me donner une liste on va dire de 4 ou 5 outils sur lesquels je travaillerai sur Gamecodeur :

  • Löve : Bien que je sois pas un fan du lua cela me permettra d’apprendre plus ce langage avec lequel j’ai du mal (et peut être l’apprivoiser finalement).
  • libGDX : Bon c’est moins sur mais quand même, j’aime bien le java.
  • MonoGame : J’ai envie d’apprendre ce framework il peut être sympa à utiliser, le C# est un langage que j’aime bien (au même titre que Java).
  • Pico-8 : du lua mais bon tellement bien pensée cette console.
  • Game Maker Studio 2 : Contrairement à ce qu’on peut entendre il est très puissant, certes on est plus sur un langage de script, mais cela reste du code quand même.

Cela peut paraître beaucoup, mais croyez moi, si j’arrive déjà à me focaliser que sur ces solutions là, j’aurais déjà fait un grand pas ! D’autant plus que l’objectif n’est pas de tous les utiliser ou les utiliser en même temps, mais de pouvoir varier mon plaisir et mes envies ! Mon objectif premier c’est de me faire plaisir.

J’essayerai de participer à des Jam. Peut être pas au début, histoire de me mettre dans le bain mais après pourquoi pas !

Conclusion ?

Ceci va conclure ce premier article qui était plus destiné à vous donner mes sentiments sur le développement, une partie de mes expériences et soucis, et ce que je veux accomplir. L’idée du partage comme cela de manière sincère, je pense, est une bonne idée, afin de « photographier » les étapes d’apprentissage, ses réussites, ses échecs et ses sentiments sur les objectifs qu’on se fixe, mais aussi de s’entraider, et bien sur partager ses codes et routines et plus globalement partager avec vous !

Merci et à bientôt pour un nouveau Jdev de crystal.

Happy coding !

Retour sur la Jam #3

Voici (enfin!) mon retour sur la jam…

Je vais commencer tout d’abord par une petite présentation. Il y a environs 2 ans que j’ai commencé à apprendre à programmer. J’ai commencé par le C et le C++ en suivant les (mauvais) conseils que m’ont donnés des programmeurs sur un forum. Avec le recul, je dirai que c’est un peu comme placer un débutant en alpinisme devant l’Everest et lui dire ne t’inquiète pas, en prenant ton temps tu va y arriver… C’est donc ainsi que j’ai appris les bases, puis je me suis lancé dans le langage Java, qui m’a attiré à l’époque pour sa portabilité.

je me suis inscrit sur GameCodeur quelques jours avant la vidéo « Sortez vous les doigts !! ». Je me suis donc tout de suite inscrit à la jam avec l’intention de livrer quelque chose en Java, mais sur les conseils de David j’ai commencé par visionner les ateliers Lua/Love2d (et j’avoue que j’aurai vraiment aimé commencer mon apprentissage de la programmation par ce langage, si seulement GameCodeur existait déjà à l’époque).

J’ai donc développé Blobscape pour la Jam en Lua avec le framework Love2d en un peu plus d’une vingtaine, en comptant la création des images (je les ai réalisées avec PhotoFiltre, pas forcément adapté mais c’est un logiciel que j’ai l’habitude d’utiliser). Les musiques et les sons ont étés réalisées par Søll (mon frère) avec BoscaCeoil (pour les musiques, c’est un excellent logiciel qui une fois pris en main permet de réaliser des musiques pour ses jeux assez facilement) et BFXR (Pour les effets sonores).

A l’origine je comptai faire une simple liste de slimes animés, mais ayant ajouté les collisions, les déplacements, les sauts… Je me suis dit autant en faire un mini-jeu complet. Si certains sont allés jusque au bout ils auront peut être vu que je ne savais pas trop comment finir le jeu, d’où l’ajout des petit feux d’artifice, une façon simple de dire « vous avez gagné! » ^^

Pour les contrôls j’avoue que rajouter la possibilité d’utiliser les flèches directionnelles ne m’aurait pris que deux secondes, ou j’aurai pu donner la possibilité de changer les contrôls, même si ça aurait été plus long,  je n’y ai tout simplement pas pensé car j’ai l’habitude d’utiliser zqsd.

Voili voilou pour Blobscape. Sinon pour la prochaine Jam ce sera du C#/Monogame pour moi, la ressemblance entre le C# et le Java m’a beaucoup facilité l’apprentissage, et Monogame est un framework qui est juste excellent (en plus j’aurai dû me renseigner plus tôt sur Monogame puisque c’est le framework avec lequel ont été développés plusieurs jeux indés que j’ai adoré)

J’ai toujours aimé regarder et tester les jeux du Ludum Dare, et j’ai beaucoup appris en lisant le code des participants, mais je n’avais jamais participé à une Jam et ça a été un réel plaisir.

En tout cas bon code à tous, et courage à tous ceux qui participeront à la Jam#4, je suis vraiment pressé de voir les réalisations de chacun, surtout avec un thème aussi ouvert.

JGC#3 _Akira_s_back

Petit retour d’expérience sur la JGC#3.
Étant inscrit depuis début octobre, et partant de très très peu, j’ai participé à la JGC d octobre et cette dernière , pour moi la question ne se pose pas, il faut que je participe à toutes les JGC car je considère que c’est un bon exercice…cf les vidéos de David sur les challenges à se mettre…
Pour le sujet, les Listes, si vous avez vu mon « projet » l’intro vous dit ce que j’en pense, dans le sens ou je ne comprends pas comment on peut coder sans listes, déjà avec c est vite le bord.. mais alors sans ça doit juste être l’horreur, donc un peu vague comme sujet !!

Alors en fan de JDR et de JdPlateaux (WagH40KKKKKKKKKKKKKKKKKKKKKKKK -_- pardon), je me suis dit tiens je vais taffer sur un projet de jeu de plateau.
J’ai bossé 2 semaines très sérieusement dessus, le temps de mettre au point les formules mathématiques d’intersection de droites et de segments, afin d’éviter les fameux polygones concaves… [[Au passage un grand remerciement à la chaine youtube coding math , une vraie mine d’or – j’adore les maths]]

Le résultat est très moche, certes, mais efficace, ne cherchez pas le gameplay ni le but, c’est juste un simulateur de plateau avec une interface graphique pour poser des décors de taille et formes différentes sur le dit plateau, avec comme règle que les décors ne peuvent ni être hors de la table ni se superposés (bon par contre ils peuvent être circonscrites l’un dans l’autre !!).

Pour ce qui est des listes, pour vous donner une idée si vous placer un décors en forme de L, il est initialement définit par une liste de nombres représentant les x et y des 6 points composants la forme L.

Puis cette liste de chiffres va être travaillée:
– la convertir en liste de points de type {(x1,y1), (x2,y2)…}, plus facile pour manier les maths…
-recalculées les valeurs des (xi,yi) lorsque l on modifie la taille, AINSI que lorsque l on modifie la position du décors (avec la souris)
-définir sous forme Ax+By=C chaque droite reliant les points 2 à 2, vérifier l’intersection de toutes les droites du nouveau décors avec toutes les droites de chaque autre décors, et si il y a intersection, calculé si les segments se croisent réellement, sans oublier les colinéaires 😉

De là j’ai eu du boulot et des retrouvailles fraternelles à célébrer, j’ai donc laissé 15 jours passer, et mon code étant très peu organisé, je me suis dit ok si je rajoute quelle que chose, je risque a 90%+ de tout faire foirer.

Donc pas de petit perso a deplacer, ni de gestion des collisions et lignes de vues (enfin les maths ayant été débrouillées c’était assez simple à adapter).

 

Ce que j’en retire:

-tout d abord une bonne leçon, essayer de rendre mon code propre, il faut que David nous enseigne ça, au passage merci Veronimish pour tous tes précieux conseils.
-Je vais refaire ce projet plus tard en mieux en plus propre.

Sinon par pitié impose nous des contraintes dans les thèmes des JGC David, parce que là encore c’est complètement ouvert donc pas assez contraignant….

Voilà, je vais essayer de tenir un journal de bord pour la 5ème , car pour la 4ème, je pars dans 3 jours, pour 20 jours en Thaïlande, pas sur que j’ai le temps de faire grand chose d autre que kiffer !!

Last but not least : Je recommande vivement Trello (ou autre) car c’est encore un excellent conseil de david, pour ce qui ont du mal à s’organiser/planifier.

Bonne année, et tout et tout pour vous tous.

Akira_s_back

La suite de l’atelier Tilemap arrive demain !

Je viens de finir de filmer la 2ème partie de l’atelier Tilemap en Love2D/Lua !
 
Je vous montre comment je déplace un personnage sur une Tilemap, case par case, et comment je détecte les collisions avec le décor !
 
C’est vraiment facile. On part de ce qu’on a appris dans l’atelier précédent, on améliore le code, et on y intègre le personnage.
 
Je vous montre tout pas à pas et je vous apprend à
– reprendre un code pour l’améliorer
– afficher un sprite à une ligne et une colonne de la map
– animer le sprite image par image !
– le déplacer avec le clavier, en gérant les limites de la map
– détecter si il collisionne avec un élément « solide » : arbre, rocher
 
45 minutes de pur bonheur ! Coooooool !
 
Je le publie demain !
 
On reprendra ces concepts en C# et on en fera un prototype de jeu (un platformer je pense).
This entry was posted in News and tagged . Bookmark the permalink.

« ma jam#3 » : p’tit retour sur expérience

Retour de ma petite expérience sur la jam#3

Langage & framework : Lua/Love2D

Code et graphisme => moi.  Mode coming out activé : Mes p’tites amibes ont été réalisé sous …. powerpoint ( AHHHHHhh j’avoue c’est mal … mais c’était rapide et pratique … au départ juste en mode prototype et finalement leur look « simple et sympa » me convenait bien )…
J’ai récupéré les fonds « planètes » sur le web avec retouche rapide sur photoshop pour les écrans : Acceuil / niveau / Win / GameOver / Jeu
Je ne sais plus précisement ou j’ai récupérer les sons (je me constitue une banque de sons petit à petit) mais j’ai rodé du coté de soundfishing.

Code externe : Je n’ai utilisé aucun code externe, j’ai pas mal chercher sur la doc de lua et love 2D pour arriver à mes fins = effet montée en compétence au top !
Temps passé : difficile à quantifier car j’ai beaucoup morceler mon temps … valait mieux avancer une petite heure que pas du tout, plus simple pour intégrer ces temps à mes activités pro et perso existantes. En tout les cas, j’ai beaucoup travailler sur mon jeu jusqu’à début décembre et ensuite j’ai découvert … la pico-8 et là ca été le drame … gros coup de cœur pour cette géniallisime bestiole … et zouh passé les 1er minutes à me dire « mais comment ils font pour écrire et maintenir du code en 8bits … moi jamais  » …et bein j’étais embarquée … que de découvertes… c’est génial … tout est intégré ! Du coup, j’ai un peu délaissé le jeu entamé pour la jam … j’avais prévu tellement de fonctionnalités que je n’ai pas implémenté … bref, j’ai mis un point d’honneur à livrer un jeu jouable … et je tiens à remercier BreakingBardo qui m’a grandement aidé pour la génération de mon .exe ! Merciii à toi !

– Le respect de la contrainte : au début un peu déroutée par une contrainte que je trouvais « large », j’ai finalement rapidement trouvé mon sujet. J’ai éssayé d’utilisé les listes le plus possible  que ce soient dans la gestion de mes amibes, de la création / affichage / suppresion des sprites (Amibes / explosion ….), de la gestion des niveaux …
Je me suis énormément questionnée sur la gestion de mes différents écrans et le passage de l’un à l’autre ainsi que sur le traitement du HUD (Score, nb d’amibes …. ).J’avais beaucoup d’idée de niveaux différents mais sans avoir pu accorder assez de temps à mon jeu pour les implémenter.

Petit bilan perso : J’ai vraiment adoré faire cette 1er Jam ! Ca pousse au <biiiiip> pour produire et c’est donc hyper hyper précieux ! J’ai trouvé en effet que le couple lua/love2d était hyper efficace (ratio simplicité / productivité au top).
Mes plus grandes difficultés, et sans doute aussi mes petits succès, ont peut être été de bien comprendre les boucles Draw'() et Update() et la gestion de la vie de mes listes …

A bientôt pour la jam#4 !

Retour sur la Jam#3

Hello tout le monde,

J’ai participé à première Game Jam avec cette expérience.
Je l’ai fait parce que je me sentais assez « fort » pour relever le défi de mettre en avant une de mes créations.

J’ai surtout voulu faire ce qui me plaisait à ce moment là : l’animation d’un petit bonhomme en utilisant uniquement les formes géometriques de bases.
Je ne l’ai techniquement pas fini. En fait, je voulais ajouter des animations quand il apparaît, quand il disparaît. Je voulais faire un niveau au-dessus en ajoutant les articulations (genoux, chevilles, coudes, poignets…).

J’ai pu découvrir un peu plus ce qu’il y avait dans le ventre de Love2D et surtout par moi-même, notamment les paramètres permettant de modifier la forme des rectangles. J’ai réfléchit par moi-même à la façon de gérer les sauts. Je voulais faire quelque chose avec la gravité 😉
J’ai aussi ajouté une fonctionnalité permettant de faire grandir ou rétrécir mon personnage.

En réalité, je n’y ai pas touché après le 30 novembre. En fait, j’étais satisfait du résultat et je voulais passer à un autre programme. Ce dernier n’a pas abouti comme je le voulais mais m’a fait apprendre d’autres choses.

Je progresse tous les jours grâce à GameCodeur. Entre Noël et le jour de l’an, j’ai fait un Puissance 4. J’ai fait le gameplay. Maintenant, je veux ajouter une autre dimension avec les animations et le graphisme. Donc à suivre.

J’en referais d’autres c’est sûr.

Steph84

Jameurs, vos expériences de la Jam#3

Salut les jameurs,

J’ai créé ce sujet afin que les Jameurs de la dernière Jam#3 de Gamecodeur puissent partager ensemble leurs expériences. On a tous été un peu dans notre coin durant cette Jam, mais maintenant elle est finie et on peut en discuter.

  • Pourquoi y avoir participé ?
  • Vous avez fini votre jeu ?
  • Vous ne regrettez pas d’y avoir participé ?
  • Qu’est ce que ça vous a apporté ?
  • Vous en referez d’autres ?
  • Des conseils ?

Pour ma pars j’ai commencé la Jam le 10 décembre, et j’ai codé jusqu’à 30 min avant sa fin hier. Je sais qu’il n’y avais pas de pression en sois, mais j’ai aimé m’en mettre, me donner une timeline et me dire que ça sera comme ça sera mais ça sera fini dans x jours. J’avais très peu d’expérience en programmation, c’était ma première Jam, et mon premier jeu tout seul, car avant je participais à des projets mais du coté graphismes et game design. J’ai appris beaucoup, et je vais continuer d’apprendre et je veux déjà participer à une autre Jam 🙂
Pour ma pars je n’ai pas trop apprécié le côté « chacun pour soi » je n’ai pas eu l’impression que beaucoup d’entre nous étaient intéressés par les projets des autres, alors qu’on est tous dans le même bateau. J’ai eu aussi l’impression que David ne s’y intéressait plus tellement, j’aurais aimé des rappels mails « Il te restes 5 jours ! » , ou « La jam est finie ! les résultats dans x jours ». Elle s’est finie dans une indifférence générale, hors pour les participants.
Sinon à pars ça, ça n’a été que du plaisir et je remercie David qui a poussé les gens à y participer via ses vidéos, je sens que j’ai passé un cap, je me suis lancé et je ne veux plus arrêter de programmer, maintenant je me lève le matin et je me dis « Tu vas devenir développeur de jeux, que dis-je tu es déjà développeur de jeux, maintenant il faut faire mieux… ».

J’ai testé tout vos jeux, j’ai laissé un message à chacun, je vous souhaite à tous bonne chance pour cette Jam et pour l’avenir ! 🙂

Ma participation à cette Jam : Very Very Little Adventure

Première GameJam GameCodeur#3 sur PICO-8

La gamejam vient de se terminer hier, c’était la 3éme edition.

Je me suis inscrit il y a peu de temps sur gamecodeur, du coup je n’ai pas pu participer aux deux premières. Il faut bien reconnaitre que les gamejam vous font bien progresser, ça m’a permis en l’occurence de me mettre à la pico-8 et au language Lua.

Une console que je viens de découvrir grâce à David et avec ces tutos en lua, j’ai pu me mettre à ce language très simple et épuré (on va à l’essentiel 😉 ) pour coder un premier plate-former.

Voila quelques gifs du jeu :

de ça:

au jeu final:

J’ai essayé avec ce projet:

  • de faire plusieurs niveaux,
  • avec un système de déplacement (collision sur les décors) et de la gravité,
  • on peut sauter avec une bar de jump
  • des particules quand on saute et quand on tue un ennemi
  • un système de tirs sur les enemies,
  • on peut aussi récupérer des munitions, des grosses pieces, et des coeurs de vie.
  • écran de start et fin pour le scoring.

Vous pouvez jouer au jeu est sur cette page.

Voila sur ce, vivement la prochaine game jam pour continuer vers de nouveaux projets.

lionel

Nouveauté membres : Postez sur le blog de Gamecodeur !

Aujourd’hui j’ai ajouté une super nouveauté !

Tu peux maintenant écrire sur le blog de Gamecodeur !

Je t’invite à partager avec la communauté :
– ta passion
– tes progrès
– tes créations (game jams, ou autres)

Pour poster un article, rien de plus simple :
– Rends-toi sur Gamecodeur, sur ta page de compte :
http://www.gamecodeur.fr/compte-dadherent/

Tu y trouveras 2 boutons : Poster un article ou voir tes articles :

Tu peux ainsi voir tes articles ou en créer un nouveau.

Les news apparaissent ensuite sur le blog : http://www.gamecodeur.fr/blog

C’est nouveau, alors peut être que ça ne marchera pas du 1er coup ! N’hésites-pas à me le dire.

This entry was posted in News and tagged . Bookmark the permalink.