Bonjour,
je réalise un jeu en AS3 (plus précisément un bubble shooter), et j'ai réussi à placer aléatoirement les boules sur un nombre défini de colonnes et de lignes, de plus, j'ai réussi à faire apparaitre une boule aléatoirement qui pourra être tirée en fonction de la direction de la souris.
Celle-ci s'accroche bien sur les boules (même si la première bug un peu...), mais en fait, je ne vois pas du tout comment réaliser le test de collision qui pourra faire exploser les boules de même couleurs.
Voici mon code de scène principal (là où j'ai un symbole boule avec cinq images clés pour les couleurs):
var xjeu:Number=75;
var yjeu:Number=50;
var largjeu:Number=400;
var hautjeu:Number=300;
var r:Rectangle=new Rectangle(xjeu,yjeu,largjeu,hautjeu);
r.dessiner(this);
var boule:Boule=null;
var boules:Array=new Array();
var nbBoules:Number=0;
function creerBoule() {
boule=new Boule();
boule.calculerLimites(xjeu,yjeu,largjeu,hautjeu);
this.addChild(boule);
boule.x=xjeu+largjeu/2;
boule.y=boule.ymax-20;
boule.scene=this;
var r:Number=Math.random();
if (r<0.2) boule.gotoAndPlay(1);
else if (r<=0.4) boule.gotoAndPlay(2);
else if (r<=0.6) boule.gotoAndPlay(3);
else if (r<=0.8) boule.gotoAndPlay(4);
else if (r<1) boule.gotoAndPlay(5);
boule.bouge=false;
boule.timer=setInterval(boule.bouger,500/50);
stage.addEventListener(MouseEvent.CLICK,boule.dep
art);
}
creerBoule()
var fleche : Fleche = new Fleche();
fleche.x=xjeu+largjeu/2;
fleche.y=boule.ymax-30;
this.addChild(fleche);
stage.addEventListener(MouseEvent.MOUSE_MOVE,flech
e.bouger);
//Boules
var nl:Number=8;
var nc:Number=18;
var qx:Number=largjeu/(nc+1);
var qy:Number=(hautjeu/2)/(nl+1);
for (var i:Number=0; i<nl; i++) {
for (var j:Number=0; j<nc; j++) {
boule = new Boule();
this.addChild(boule);
boule.x=xjeu+qx*(j+1);
boule.y=yjeu+qy*(i+1);
var p:Number=Math.random();
if (p<0.2) boule.gotoAndPlay(1);
else if (p<=0.4) boule.gotoAndPlay(2);
else if (p<=0.6) boule.gotoAndPlay(3);
else if (p<=0.8) boule.gotoAndPlay(4);
else if (p<1) boule.gotoAndPlay(5);
boules[nbBoules]=boule;
nbBoules++;
}
}
Et voici mon code du fichier boule.as:
package {
import flash.display.*;
import flash.events.*;
import flash.utils.*;
public class Boule extends MovieClip {
public var xmin:Number;
public var ymin:Number;
public var xmax:Number;
public var ymax:Number;
public var scene:MovieClip;
public function calculerLimites(xjeu:Number,yjeu:Number,largjeu:Nu
mber,hautjeu:Number)
{
var r=this.getRect(null);
this.xmin=xjeu-r.x;
this.ymin=yjeu-r.y;
this.xmax = xjeu + largjeu - (r.width+r.x);
this.ymax = yjeu + hautjeu - (r.height+r.y);
}
public var vx:Number;
public var vy:Number;
public var bouge:Boolean=false;
public var timer:Number;
public function bouger() {
if (bouge==true) {
this.x=this.x+this.vx;
this.y=this.y+this.vy;
if (this.y<=this.ymin) {
this.vy=- this.vy;
this.y=this.ymin;
}
if (this.x>=this.xmax) {
this.vx=- this.vx;
this.x=this.xmax;
}
if (this.x<=this.xmin) {
this.vx=- this.vx;
this.x=this.xmin;
}
if (this.y>=this.ymax) {
this.parent.removeChild(this);
clearInterval(timer);
scene.stage.removeEventListener(MouseEvent.CL
ICK,this.depart);
scene.creerBoule();
}
var memeCouleur:Number=0;
var touche:Boolean=false;
for (var i:Number=0; i<scene.boules.length&&!touche; i++) {
if (scene.boules[i]!=null&&this.hitTestObject(scene.b
oules[i]))
{
touche=true;
bouge=false;
scene.boules[scene.nbBoules]=scene.boule;
scene.nbBoules++;
clearInterval(timer);
scene.stage.removeEventListener(MouseEvent.
CLICK,this.depart);
scene.creerBoule();
}}}
}
public function depart(e:MouseEvent) {
this.bouge=true;
var dx:Number=this.parent.mouseX-scene.fleche.x;
var dy:Number=this.parent.mouseY-scene.fleche.y;
var l :Number= Math.sqrt(dx*dx+dy*dy);
this.vx=(dx/l)*5;
this.vy=(dy/l)*5;
}
}
}
Merci d'avance. (vivement un editeur de code dans JVC).