(English) Poker Geeks Left Out in the Cold by Apple (but Loving Android)

Share

Posted on mercredi 9 mars 2011 at 13:57 by admin · Permalink · One Comment
Share

In: Nouveautés · Tagged with: , , ,

ActionScript : Tutorial Comment créer une gravité comme un jeu de plateforme à la Mario

Share

Dans ce petit tutoriel je vais vous montrer comment créer une une gravité sur un personnage comme dans la pluspart des jeux de plateformes.

Commençons !

Télécharger les fichiers

Création d’un MovieClip pour le héros

Ajouter le code du saut

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
// La gravité
var gravity = 0.8;

// La position du sol (y)
var floor = 300;

// Ajouter le MovieClip du héros
var hero = new Hero();

// Position en x du héros
hero.x = 550/2;

// Position en y du héros
hero.y = floor;

// Mettre l'état du héros à l'état "stand
hero.gotoAndStop("stand");

// Ajouter le héros sur la liste d'affichage
addChild(hero);

// Création de la propriété speedY sur le héros et l'initialiser à 0
hero.speedY = 0

// Création de la propriété impulsion sur le héros et l'initialiser à 10
hero.impulsion = 10;

// Ajout d'un écouteur d'événement entre chaque frame sur le héros
hero.addEventListener(Event.ENTER_FRAME, heroEnterFrame)

function heroEnterFrame (pEvent)
{
    // Entre chaques frames
    // Appliquer la gravité sur la vitesse
    hero.speedY += gravity;

    // Bouger le héros en fonction de sa vitesse
    hero.y += hero.speedY;

    // Si le y du héros dépasse la limite du sol
    if (hero.y > floor)
    {
        // Le héros est replacé au niveau du sol
        hero.y = floor

        // Anuler la vitesse actuelle en cas de contact avec le sol
        hero.speedY = 0;

        // changer l'état du héros pour l'état "stand"
        hero.gotoAndStop("stand");
    }
}

// Ajouter un écouteur d'événement sur la scène au clic enfoncé
stage.addEventListener(MouseEvent.MOUSE_DOWN, mouseDown)

function mouseDown (pEvent)
{
    // Quand l'utilisateur clic
    // Si le héros et à l'état de "stand"
    if (hero.currentLabel == "stand")
    {
        // Lui donner une impulsion vers le haut
        hero.speedY = -hero.impulsion;

        // passer son état à l'état "jump"
        hero.gotoAndStop("jump");
    }
}

Get Adobe Flash player

Télécharger les sources : www.benoitfreslon.com_Create_gravity_like_a_mario_plateformer

Posted on mercredi 2 février 2011 at 14:21 by admin · Permalink · 7 Comments
Share

In: ActionScript3 as3, Game Design, Astuce, Tutoriel · Tagged with: , , , , , , , ,

Global Game Jam 2011 Paris : GameXtinction (jeu réalisé in 48h)

Share

Global Game Jam 2011 à Isart Digital, Paris, FRANCE.

Le compte Tweeter officiel de la Global Game Jam à Paris

La page officielle du global Game Jam à Paris

Voilà c’était ma première participation au Global Game Jam

En résumé : des gens sympathiques, une bonne organisation, de bons jeux et en somme une bonne expérience pour tous.

Nous avons travaillé en équipe pour réaliser un prototype de jeu avec le thème imposé :  Extinction, voici le jeu : GameXtinction

Nous avons atteint un achievement : Break the 4th wall, Casser le 4ème mur.

Description :

GameXtinction est un jeu original et expérimental.
Le personnage principal est un BUG informatique qui mange des éléments du jeu.
Chaque élément mangé crée un nouveau bug !
Cette créature peut voyager de jeux en jeux avec sa soucoupe volante.

Crédits :
  • Cesar Espejo Pham: Artiste 2D
  • Betrand Pujol: Sound designer
  • Tahir Vico: Artiste 2D
  • Audry Vasseaux: Artiste 2D
  • Benoit Freslon: Game Designer, Codeur
La page de GameXtinction page sur Global Game Jam.org
Vous pouvez jouer à  GameXtinction ici.
Un grand merci à Isart Digital et à Olivier Lejade.
Posted on mardi 1 février 2011 at 13:57 by admin · Permalink · Leave a comment
Share

In: Concours, Flash, Jeux · Tagged with: , , , , , , , ,

ActionScript : Déplacer un objet avec le clavier avec des contrôles absolus

Share

Dans ce tutoriel je vais vous montrer comment déplacer un objet avec le clavier en contrôle absolu en Flash.

Voir également comment déplacer un objet avec le clavier avec des contrôles relatifs à la caméra.

Contrôle absolu ? Kézako ?

La direction de votre objet va être calculée en fonction de l’orientation de votre objet. (Resident Evil, Micro Machines, Gears of War, etc.). Ce script est très utile pour les jeux de voitures.

Comment faire un contrôle absolu en Flash?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
// Assigner 4 booléens pour chaque touche
var keyUp = false;
var keyDown = false;
var keyLeft = false;
var keyRight = false;
// Ajouter une écouteur d'événement clavier pour une touche pressée sur la scène
stage.addEventListener(KeyboardEvent.KEY_DOWN, pressKey);

function pressKey(pEvent) {
    // Si une touche est enfoncée, changer la valeur du boolean (true) assignée pour la touche correspondante
    if (pEvent.keyCode == 38) {
        keyUp = true;
    } else if (pEvent.keyCode == 40) {
        keyDown = true;
    } else if (pEvent.keyCode == 37) {
        keyLeft = true;
    } else if (pEvent.keyCode == 39) {
        keyRight = true;
    }
}
// Ajouter un écouteur d'événement clavier pour une touche relâchée sur la scène
stage.addEventListener(KeyboardEvent.KEY_UP, releaseKey);
function releaseKey(pEvent) {
    // Si une touche est relâchée, changer la valeur du boolean (false) assignée pour la touche correspondante
    if (pEvent.keyCode == 38) {
        keyUp = false;
    } else if (pEvent.keyCode == 40) {
        keyDown = false;
    } else if (pEvent.keyCode == 37) {
        keyLeft = false;
    } else if (pEvent.keyCode == 39) {
        keyRight = false;
    }
}

// Assigner la vitesse de l'objet à 6px/frame
var speed = 6;

// Et la vitesse de rotation en °
var rotationSpeed = 5;

// Ajouter un écouteur d'événement entre chaque frame sur l'objet en mouvement
myCircle.addEventListener(Event.ENTER_FRAME, circleEnterFrame);

function circleEnterFrame(pEvent) {
    // Assigner la vélocité initiale de l'objet à 0
    var velocity = 0;
    if (keyUp) {
        // Si la touche Haut est enfoncée on assigne la vitesse de l'objet à la vélocité courante
        velocity = speed;
    }
    if (keyDown) {
        // Si la touche Haut est enfoncée on assigne la vitesse de l'objet à la vélocité courante divisée par 2
        velocity =  -  speed / 2;
    }
    if (keyLeft) {
        // Faire tourner l'objet sur lui même
        pEvent.currentTarget.rotation -=  rotationSpeed;
    }
    if (keyRight) {
        //Faire tourner l'objet sur lui même
        pEvent.currentTarget.rotation +=  rotationSpeed;
    }

    // On convertie l'angle formé par l'objet en radian
    var angleRadian = pEvent.currentTarget.rotation / 180 * Math.PI;

    // On déplace l'objet avec l'angle, soit son orientation et sa vitesse courante donc sa vélocité
    pEvent.currentTarget.x +=  Math.cos(angleRadian) * velocity;
    pEvent.currentTarget.y +=  Math.sin(angleRadian) * velocity;
}

Télécharger la source : www.benoitfreslon.com_Move_an_object_with_keyboard_with_absolute_controls

Posted on at 11:29 by admin · Permalink · Leave a comment
Share

In: ActionScript3 as3, Game Design, Astuce, Tutoriel · Tagged with: , , , , , ,

Nano War 2.0 beta privée 6: multijoueur

Share

Merci d’avoir testé les précédentes versions betas.
J’ai corrigé un bon paquet de bugs et j’ai ajouté quelques spécificités y compris le mode multijoueur.
Maintenant vous pouvez jouer à Nano War contre 1, 2 ou 3 joueurs en même temps avec le nouveau gameplay.
Le jeu est encore en version beta car le mode multijoueur a besoin d’être testé à fond.
Pour l’instant il n’y a que 3 cartes disponibles: 2 joueurs, 3 joueurs, 4 joueurs chacuns pour soi.

Vous pouvez toujours jouer à la version beta ici avec le mot de passe : beta.

Amusez-vous bien ! Et n’oubliez pas de rapporter les bugs et vos suggestions sur le the forum (aucune inscription demandée).

Nouveautés de la Beta 6 :

  • Mode multijoueur
  • Compte Nano War 2, celui de Nano War 1 est toujours utilisable
  • Les joueurs peuvent jouer sans inscription
  • Les statistiques de la partie sont enregistrés
  • Nouvelle musique d’ambiance pendant la partie
  • Nouveau système de collision
  • Bug de la pause corrigé
  • Bug corrigé des unités qui gênaient le clic
  • Bug des sons des unités qui accélèrent corrigé
  • Nouvel asset graphique pour la cellule Globule blanc fusionnée avec l’anticorps
  • Les unités s’orientent vers leur cible uniquement quant elles accélèrent
  • La touche R permet de redémarrer la partie
  • Bug de la pause automatique corrigé
  • Bug du bouton Suivant corrigé
Posted on vendredi 28 janvier 2011 at 12:24 by admin · Permalink · Leave a comment
Share

In: Jeux, Nano War, Nouveautés · Tagged with: , , , , , , ,

ActionScript: Déplacer un objet avec le clavier, contrôles relatifs à la caméra

Share

Dans ce tutoriel je vais vous montrer comment déplacer un objet avec le clavier suivant la position de la caméra.

Contrôles relatifs à la caméra ?

La direction de votre objet est calculée en fonction de la position de la caméra.(Mario 64, Uncharted, GTA 3, etc.).

Exemple : Si j’appuis sur le bouton droit le personnage va aller vers la droite de mon écran.

Comment faire un contrôle relatif ?

  • Récupérer les informations du clavier
  • Créer un vecteur de direction
  • Déplacer l’objet en fonction du vecteur entre chaque frame
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
// Assigner 4 booléens pour chaque touche
var keyUp = false;
var keyDown = false;
var keyLeft = false;
var keyRight = false;
// Ajouter une écouteur d'événement clavier pour une touche pressée sur la scène
stage.addEventListener(KeyboardEvent.KEY_DOWN, pressKey);
function pressKey(pEvent) {
    // Si une touche est enfoncée, changer la valeur du boolean (true) assignée pour la touche correspondante
    if (pEvent.keyCode == 38) {
        keyUp = true;
    } else if (pEvent.keyCode == 40) {
        keyDown = true;
    } else if (pEvent.keyCode == 37) {
        keyLeft = true;
    } else if (pEvent.keyCode == 39) {
        keyRight = true;
    }
}
// Assigner 4 booléens pour chaque touche
var keyUp = false;
var keyDown = false;
var keyLeft = false;
var keyRight = false;

// Ajouter une écouteur d'événement clavier pour une touche pressée sur la scène
stage.addEventListener(KeyboardEvent.KEY_DOWN, pressKey);

function pressKey(pEvent) {
    // Si une touche est enfoncée, changer la valeur du boolean (true) assignée pour la touche correspondante
    if (pEvent.keyCode == 38) {
        keyUp = true;
    } else if (pEvent.keyCode == 40) {
        keyDown = true;
    } else if (pEvent.keyCode == 37) {
        keyLeft = true;
    } else if (pEvent.keyCode == 39) {
        keyRight = true;
    }
}

// Assigner la vitesse de l'objet
var speed = 6;

// Ajouter un écouteur d'événement entre chaque frame sur l'objet
myCircle.addEventListener(Event.ENTER_FRAME, circleEnterFrame);

function circleEnterFrame(pEvent) {
    // Créer et initialiser un vecteur 2D
    var vector = new Point(0,0);
    if (keyUp) {
        //Si la touche Haut est enfoncée assigner une nouvelle valeur au vecteur sur y
        vector.y +=  -1;
    }
    if (keyDown) {
        // Si la touche Bas est enfoncée assigner une nouvelle valeur au vecteur sur y
        vector.y +=  1;
    }
    if (keyLeft) {
        // Si la touche Gauche est enfoncée assigner une nouvelle valeur au vecteur sur x
        vector.x +=  -1;
    }
    if (keyRight) {
        // Si la touche Right est enfoncée assigner une nouvelle valeur au vecteur sur x
        vector.x +=  1;
    }
    // Calculer l'angle en radian formé par le vecteur de vitesse
    var angle = Math.atan2(vector.y,vector.x);
    // Si la taille du vecteur n'est pas nul
    if (vector.length > 0) {
        // Déplacer l'objet en fonction de l'angle formé et de la vitesse
        pEvent.currentTarget.x +=  Math.cos(angle) * speed;
        pEvent.currentTarget.y +=  Math.sin(angle) * speed;
    }
}

[kml_flashembed publishmethod="static" fversion="10.0.0" movie="http://www.benoitfreslon.com/wp-content/uploads/2011/01/www.benoitfreslon.com-Move-an-objet-with-keyboard-with-camera-relative-control.swf" width="550" height="400" targetclass="flashmovie"]
Get Adobe Flash player


Télécharger la source : www.benoitfreslon.com-Move-an-objet-with-keyboard-with-camera-relative-control.zip

Posted on mardi 4 janvier 2011 at 16:22 by admin · Permalink · Leave a comment
Share

In: ActionScript3 as3, Game Design, Astuce, Tutoriel · Tagged with: , , , , , ,

ActionScript: Déplacer un objet avec effet de ralentissement

Share

Il existe une formule très simple pour déplacer un objet vers des coordonnées données avec un effet de ralentissement.

Cette formule fait diminuer la vitesse petit à petit suivant le temps.

vitesse = distance_entre_les_objets / coefficiant_de_ralentissement

La distance va décroître car la distance va décroître également.

Si je donne des valeurs :

object.x = 50

targetX = 100

speedX = (targetX – object.x)  / 5

Sur la première image : speed = 10

object.x += (100 – 50) /5 > 50/5 > 10

> object.x = 50+10 = 60

Sur la seconde image : speed = 8

object.x += (100 – 60) /5 > 40/5 = 8

> object.x = 60 + 8 = 68

Sur la troisième image: speed = 6,4

object.x += (100 – 68) / 5 > 32/5 = 6,4

> object.x = 68 + 6,4 = 74,4

etc.

Sur la 100ème image : speed = 0

object.x += (100 – 100) / 5 > 0 /5 = 0

> object.x = 100 + 0 = 100

Code source :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
// Ajouter un écouteur d'événément au clic de souris sur la scène
stage.addEventListener(MouseEvent.CLICK, click);

function click(pEvent) {
    // Lorsqu'on clic on donne de les nouvelles coordonnées de la souris à l'objet myBall
    myBall.targetX = stage.mouseX;
    myBall.targetY = stage.mouseY;
}

// Mettre les coordonnées par défaut
myBall.targetX = 200;
myBall.targetY = 200;

// Ajouter un écouteur d'énévement entre chaque frame
myBall.addEventListener(Event.ENTER_FRAME, ballEnterFrame);

function ballEnterFrame(pEvent) {
    // Entre chaque frame on déplace l'objet vers ses coordonnées cibles
    var b = pEvent.currentTarget;
    b.x += (b.targetX - b.x) / 8;
    b.y += (b.targetY - b.y) / 8;
}

Exemple:

Get Adobe Flash player

Télécharger la source : www.benoitfreslon.com Move an object to coordinates with smoothing.zip

Posted on lundi 3 janvier 2011 at 15:53 by admin · Permalink · Leave a comment
Share

In: Game Design, Astuce, Tutoriel · Tagged with: , , , ,

ActionScript : Lancer une fonction après un délais avec setTimeout

Share

Il a y différentes façons de lancer une fonction après un délais :

Comment utiliser le setTimeout ?

1
var intervalIndentifier
1
2
3
4
5
// La fonction hellor va se lancer dans 2000 ms
intervalIdentifier = setTimeout(hello, 2000)
function hello() {
    trace("function launched")
}
1
clearTimeout(intervalIdentifier)

NB :

Ajouter des paramètres dans le setTimeout :

La fonction lancée par le setTimout peut recevoir plusieurs arguments.

Pour ajouter des arguments ajoutez simplement des arguments après le second paramètre du setTimeout:

Bien entendu la fonction qui doit être lancée doit avoir exactement le bon nombre d’arguments.

1
2
3
4
intervalIdentifier = setTimeout(hello, 2000, "world", "www.benoitfreslon.com")
function hello(arg1, arg2) {
    trace(arg1, arg2)
}

Exemple:

Get Adobe Flash player

Télécharger la source : www.benoitfreslon.com Launch a function after a delay with setTimeout.zip

Posted on at 14:35 by admin · Permalink · Leave a comment
Share

In: ActionScript3 as3, Astuce · Tagged with: , , , , , ,

ActionScript: Lancer des projectiles en direction de la souris

Share

Après avoir calculé l’angle entre 2 objets vous pouvez maintenant utiliser cet angle pour par exemple lancer des projectiles en direction d’un objet avec un peu de trigonométrie.

Comment ?

  1. Calculer l’angle (en radian) entre les 2 objets graphiques avec la méthode Math.atan2.
  2. Au clic afficher un nouveau projectile à la position du tank et ajouter un évènement enter frame sur ce projectile.
  3. Sauvegarder l’angle entre le tank et le curseur dans le projectile.
  4. Utiliser l’angle pendant l’évènement enter frame pour calculer la vitesse en x et en y avec le cosinus et le sinus.

Get Adobe Flash player

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
import flash.display.MovieClip;
import flash.geom.Point;
import flash.events.MouseEvent;
// Code by Benoit Freslon.
// Tutorials, Flash games:
// http://www.benoitfreslon.com
// Cet objet regardera constamment la souris.
myTank.addEventListener(Event.ENTER_FRAME,  tankEnterFrame);
// Cette fonction est lancée 25 fois par seconde.;
function tankEnterFrame(pEvt) {
    // pEvt.currentTarget: myTank
    var mc = pEvt.currentTarget;
    // Calculer l'angle en radians entre la souris et l'objet
    var angleRadian = Math.atan2(mouseY - mc.y,mouseX - mc.x);
    // Convertir l'angle radians en degrés.
    var angleDegree = angleRadian * 180 / Math.PI;
    // Orienter l'objet.
    mc.rotation = angleDegree;
    // Afficher l'angle en degrés sur l'interface.
    txtAngle.text = Math.round(angleDegree) + "°";
}
// Ajouter un évènement souris qui se déclenchera au clic.
stage.addEventListener(MouseEvent.MOUSE_DOWN, mouseDown);
function mouseDown(pEvent) {
    // Ajouter un nouveau projectile
    var b = new Bullet();
    // Placer le projectile aux coordonnées du tank.
    b.x = myTank.x;
    b.y = myTank.y;
    // Enregistrer l'angle dans le projectile.
    // Cet angle orientera le projectile
    b.angleRadian = Math.atan2(mouseY - myTank.y,mouseX -myTank.x);
    // Ajouter un écouteur d’évènement ENTER_FRAME)
    b.addEventListener(Event.ENTER_FRAME, bulletEnterFrame);
    // Afficher le projectile sur la scène
    addChild(b);
}
// Vitesse du projectile
var speed = 8;
function bulletEnterFrame(pEvent) {
    // Enregistrer l'objet cible dans une variable
    var b = pEvent.currentTarget;
    // Bouger l'objet entre chaque frame
    // Sur l'axe X utiliser le cosinus de l'angle
    b.x +=  Math.cos(b.angleRadian) * speed;
    // Sur l'axe Y utiliser le sinus de l'angle
    b.y +=  Math.sin(b.angleRadian) * speed;
    // Orienter l'objet en fonction de l'angle en degrés.
    b.rotation = b.angleRadian * 180 / Math.PI;
    // Mais il faut supprimer les projectiles lorsqu'ils se retrouvent dehors
    // Si le projectile est hors de l'écran
    if (b.x < 0 || b.x > 400 || b.y < 0 || b.y > 400) {
        // Supprimer le projectile de l'affichage
        removeChild(b);
        // /!\ ET RETIRER SON ECOUTEUR ENTER_FRAME
        b.removeEventListener(Event.ENTER_FRAME, bulletEnterFrame);
    }
}

Télécharger les sources : www.benoitfreslon.com_Throw_bullets_to_mouse_direction.zip

Posted on lundi 27 décembre 2010 at 12:50 by admin · Permalink · 6 Comments
Share

In: ActionScript3 as3, Game Design, Astuce, Tutoriel · Tagged with: , , , , ,

ActionScript: Detect collision between 2 circles

Share

Avec le fameux théorème de Pythagore  on peut détecter facilement des collisions entre 2 cercles.

Il suffit d’utiliser les rayons des 2 cercles avec la propriétés width divisée par 2.

En fait la propriété width renvoie le diamètre de l’objet circulaire. Donc si on veut le rayon on fait comme cela :

rayon = diametre / 2

rayon = cercle.width / 2

Ensuite si on calcule la distance entre les 2 cercles on peut détecter la collision :

if distance < ( circle1.width/2+ circle2.width/2 ) est true => Collision

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
// Lancer l'événement enter frame
this.addEventListener(Event.ENTER_FRAME, enterFrame);
function enterFrame(pEvent:Event):void {
    // Calculer la distance entre les 2 MovieClips
    var dist:int = getDistance(myCircleBlu,myCircleRed);
    // Tester la distance entre les 2 cercles
    if (dist < myCircleRed.width/2 +  myCircleBlu.width/2) {
        // Si il y a une collision on change l'opacité des cercles
        myCircleRed.alpha = 0.5;
        myCircleBlu.alpha = 0.5;
    } else {
        myCircleRed.alpha = 1;
        myCircleBlu.alpha = 1;
    }
}
function getDistance(pObj1:MovieClip,pObj2:MovieClip):Number {
    var distX:Number = pObj1.x - pObj2.x;
    var distY:Number = pObj1.y - pObj2.y;
    return Math.sqrt(distX * distX + distY * distY);
}
Posted on vendredi 3 décembre 2010 at 11:02 by admin · Permalink · One Comment
Share

In: ActionScript3 as3, Game Design, Astuce, Tutoriel · Tagged with: , , , ,