Juste un petit mot pour rappeller ( puisque je me dois d´être le monsieur Flash du forum
) que Flash reste une alternative assez simple à apprendre, et puissante pour faire des jeux vidéos et commencer à aligner ses productions sur la scène amateur...
Hormis la 3D, Flash peut permettre de produire pas mal de styles de jeux différents.
La partie programmation néssecaire à la création d´un jeu Flash, si elle n´est pas aussi simple que RPGMachinTruc, est tout de même plus facile que de developper en C++ ou n´importe quel autre langage bas niveau.
Et cela aura au moins de poser des bases, et de vous permettre de voir si vous souhaitez vous investir dans un langage plus complexe.
et tu pourrais en profiter pour indioquer un bon cours.livre? mmmh?
et tu pourrais en profiter pour indioquer un bon cours.livre? mmmh?
Mais il va meme mettre en ligne des exemples de sources codes ![]()
Remarque, je pourrais presque
Perso, et pour les anglophones, je recommanderais Flash MX game design demystified, de Jobe Makar ( qui est un gars incroyablement gentil, que vous pouvez contacter sur FlashKit ) ainsi que toute la serie de Friends of Ed, qui je crois, a été traduit en français . ..
pis pour le code source, et pour montrer au progeux que l´on ne vit pas dans un monde si différent, voici :
( o = this.createEmptyMovieClip( " point" , 0 ) ).lineStyle(7,0xffcc00)
o.moveTo(4,4)
o.lineTo(4.5,4);
map= new String("
%C2%80%C2%80%C2%80%C2%80A%02A%02%5F%7E%60%3ESFR%26
%5F%7E%60%3EA%01%01%02%5Fp%7C%3E%5Fp%7C%3EAbD%02%7
F%7E%60%40%03%7E%60%21%03a%04%21%03o%3C%21%7Fo%3C%
40%01%0D%19%01%7Fp%7C%40%03p%7C%21%03a%04%21%03p%7
C%21%7Fp%7C%40A%02A%02%5F%7E%60%3E%5F%7E%60%3EG%01
%012wp%7C8wp%7C8AbD%02%60%7E%60%7E%60%7E%60%7EA%01
%01%02%C2%80%C2%80%C2%80%C2%80,%01%01%01%01%40%7F%
40%7F%22%03%21C%22%03%21C%22%03%21C%40%C2%80%C2%80
%7F%22%11%05C%22%11%05C%40%1F%3D%7F%02%01%01A%02%0
1%01A%02%01%01A%02%01%01A%02%01%01A%02%01%01A%02%0
1%01A%02%01%01A%02%01%01A%02%01%01A%02%01%01A%40%7
F%40%7F%22%03%21C%22%03%21C%3A%7F%40O%0A%11%05I%0A
%11%05I%40%1F%3D%7F%21%03%21%03%21%03%21%03%40%C2%
80%C2%80%7F%01%01%01%01").split(",");
for ( var i = 0, eats = 0 ; i < 28 * 31 ; i++ ) {
occ = ( (dec=new
String("0000000").substr(0,7-(dec=(unescape(map[0]
).charAt(int(i/7)).charCodeAt(0)-1).toString(2)).l
ength)+dec).charAt(i%7)==1);
eat = ( (dec=new
String("0000000").substr(0,7-(dec=(unescape(map[1]
).charAt(int(i/7)).charCodeAt(0)-1).toString(2)).l
ength)+dec).charAt(i%7)==1);
new
Color(o.duplicateMovieClip("t_"+i,++d,{_x:(i%28)*8
,_y:int(i/28)*8,occ:occ})).setRGB(occ?0xee9933:0x0
);
if(eat)new
Color(o.duplicateMovieClip("e_"+i,++d,{_x:(i%28)*8
+2,_y:int(i/
28)*8+2,_xscale:50,_yscale:50,onUnload:function(){
if(!(--eats)){trace( " CONGRATULATIONS! LEVEL
COMPLETE!");_root.gameover=true;}}},eats++)).setRG
B(0x00ff00);
}
o.duplicateMovieClip("player",++d,{ _x: 13 * 8, _y: 23 * 8 } ) .onEnterFrame = function ( ) {
if ( (this._x+=vx)%8==0&&(this._y+=vy)%8==0){
vx=((usercode=(Key.isDown(Key.RIGHT))?1:(Key.isDow
n(Key.LEFT))?2:(Key.isDown(Key.DOWN))?3:(Key.isDow
n(Key.UP))?4:0)==1&&!_root["t_"+((this._x>>3)+1+((
this._y>>3)*28))].occ)*2+(usercode==2&&!_root["t_"
+((this._x>>3)-1+((this._y>>3)*28))].occ)*-2;
vy=(usercode==3&&!_root["t_"+((this._x>>3)+(((this
._y>>3)+1)*28))].occ)*2+(usercode==4&&!_root["t_"+
((this._x>>3)+(((this._y>>3)-1)*28))].occ)*-2;
_root["e_"+((this._x>>3)+(((this._y>>3))*28))].rem
oveMovieClip();
}
this._x= ( this._x == 216 && usercode == 1 ) ? 0 : ( this._x == 0 && usercode == 2 ) ? 216 : this._x;
}
for ( e=0;e<5;e++,new Color(enemy).setRGB(0xff0000)){
( enemy = o.duplicateMovieClip("enemy_"+e,++d,{ _x: 13 * 8, _y: 13 * 8 } ) ).onEnterFrame = function ( ) {
if ( ( this._x += this.dir.x ) % 8 == 0 && ( this._y += this.dir.y) % 8 == 0 ) {
this._x = ( this._x == 216 && this.dir.x == 2 ) ? 0 : ( this._x == 0 && this.dir.x == -2 ) ? 216 : this._x;
possible = [];
if (
!_root["t_"+(((this._x>>3)+1)+((this._y>>3)*28))].
occ && this.dir.x ! =-2 ) possible.push ( { x: 2, y: 0 } ) ;
if (
!_root["t_"+(((this._x>>3)-1)+((this._y>>3)*28))].
occ && this.dir.x ! = 2 ) possible.push ( { x:-2, y: 0 } ) ;
if (
!_root["t_"+((this._x>>3)+(((this._y>>3)+1)*28))].
occ && this.dir.y ! =-2 ) possible.push ( { x: 0, y: 2 } ) ;
if (
!_root["t_"+((this._x>>3)+(((this._y>>3)-1)*28))].
occ && this.dir.y ! = 2 ) possible.push ( { x: 0, y:-2 } ) ;
this.dir = possible[ random( possible.length ) ];
}
if ( _root.gameover || ( _root.gameover = ( (this._x-(p =
_root.player)._x)*(this._x-p._x)+(this._y-p._y)*(t
his._y-p._y)<64))) {
trace( " GAME OVER." ) ;
delete this.onEnterFrame;
delete p.onEnterFrame;
}
}
}
Copier ceci dans la premiere frame, compiler, et vla un pacman ( heu . .. dois-je préciser que ce n´est pas de moi ? ; ) )
je sais, ca a l´air compliqué : mais c´est uniquement parceque le challenge était de faire le pacman avec le code le plus court possible : un vrai pac-man, sans se soucier de la longueur du code, peut être beaucoup plus simple et moins confus ![]()
c´est une participation au topic " obfuscated code" qu´on a lancé avec kUfa ? . . ah non, pardon..
eh eh ; ))
lol - nan, même pas !
Mais l´obsfucated code en Flash est particulierment pertinent car il est très facile de décompiler un . swf
En ce qui me concerne, j´ai toujours décidé de ne pas verser dans ces pratiques, partant du principe que si quelqu´un sait interpreter mon code, cela veut dire qu´il serait de toute façon à même d´arriver aux mêmes résultats avec un peu de travail . .. surtout sachant que dans Flash, le code peut être rattaché à n´importe quel objet présent dans l´animation, decrypter peut devenir labyrinthique ![]()
impressionnant ce code ! !
on voit les données directement dans le code !
oui : touffu mais assez simple, sauf que sans l´indentation, on s´y perd facilement
En fait, c´est tout l´opposé de " l´obsfucated" : chaque fonction est ecrite pour être le plus efficace possible, selon la syntaxe de Flash, bien entendu ![]()
Dois je preciser que seules ces quelques ligne font un pacman ?
Elles font la carte, les sprites ( simples ) , le gameplay et l´IA ( simple aussi) . .. rien à rajouter : tout est là ! ![]()
moi jai just rien compris...
( o = this.createEmptyMovieClip( " point" , 0 ) ) .lineStyle(7,0xffcc00)
o.moveTo(4,4)
o.lineTo(4.5,4);
map= new String("
%C2%80%C2%80%C2%80%C2%80A%02A%02%5F%7E%60%3ESFR%26
%5F%7E%60%3EA%01%01%02%5Fp%7C%3E%5Fp%7C%3EAbD%02%7
F%7E%60%40%03%7E%60%21%03a%04%21%03o%3C%21%7Fo%3C%
40%01%0D%19%01%7Fp%7C%40%03p%7C%21%03a%04%21%03p%7
C%21%7Fp%7C%40A%02A%02%5F%7E%60%3E%5F%7E%60%3EG%01
%012wp%7C8wp%7C8AbD%02%60%7E%60%7E%60%7E%60%7EA%01
%01%02%C2%80%C2%80%C2%80%C2%80,%01%01%01%01%40%7F%
40%7F%22%03%21C%22%03%21C%22%03%21C%40%C2%80%C2%80
%7F%22%11%05C%22%11%05C%40%1F%3D%7F%02%01%01A%02%0
1%01A%02%01%01A%02%01%01A%02%01%01A%02%01%01A%02%0
1%01A%02%01%01A%02%01%01A%02%01%01A%02%01%01A%40%7
F%40%7F%22%03%21C%22%03%21C%3A%7F%40O%0A%11%05I%0A
%11%05I%40%1F%3D%7F%21%03%21%03%21%03%21%03%40%C2%
80%C2%80%7F%01%01%01%01").split(",");
for ( var i = 0, eats = 0 ; i < 28 * 31 ; i++ ) {
occ = ( ( dec=new
String("0000000").substr(0,7-(dec=(unescape(map[0]
).charAt(int(i/7)).charCodeAt(0)-1).toString(2)).l
ength)+dec).charAt(i%7)==1);
eat = ( ( dec=new
String("0000000").substr(0,7-(dec=(unescape(map[1]
).charAt(int(i/7)).charCodeAt(0)-1).toString(2)).l
ength)+dec).charAt(i%7)==1);
new
Color(o.duplicateMovieClip("t_"+i,++d,{_x:(i%28)*8
,_y:int(i/28)*8,occ:occ})).setRGB(occ?0xee9933:0x0
) ;
if(eat)new
Color(o.duplicateMovieClip("e_"+i,++d,{_x:(i%28)*8
+2,_y:int(i/
28)*8+2,_xscale:50,_yscale:50,onUnload:function(){
if(!(--eats)){trace( " CONGRATULATIONS! LEVEL
COMPLETE!");_root.gameover=true;}}},eats++)).setRG
B(0x00ff00);
}
o.duplicateMovieClip("player",++d,{ _x: 13 * 8, _y: 23 * 8 } ) . onEnterFrame = function ( ) {
if ( ( this._x+=vx)%8==0&&(this._y+=vy)%8==0){
vx=((usercode=(Key.isDown(Key.RIGHT))?1:(Key.isDow
n(Key.LEFT))?2:(Key.isDown(Key.DOWN))?3:(Key.isDow
n(Key.UP))?4:0)==1&&!_root["t_"+((this._x>>3)+1+((
this._y>>3)*28))].occ)*2+(usercode==2&&!_root["t_"
+((this._x>>3)-1+((this._y>>3)*28))].occ)*-2;
vy=(usercode==3&&!_root["t_"+((this._x>>3)+(((this
._y>>3)+1)*28))].occ)*2+(usercode==4&&!_root["t_"+
( (this._x>>3)+(((this._y>>3)-1)*28))].occ)*-2;
_root["e_"+((this._x>>3)+(((this._y>>3))*28))].rem
oveMovieClip();
}
this._x= ( this._x == 216 && usercode == 1 ) ? 0 : ( this._x == 0 && usercode == 2 ) ? 216 : this._x;
}
for ( e=0;e<5;e++,new Color(enemy).setRGB(0xff0000)){
( enemy = o.duplicateMovieClip("enemy_"+e,++d,{ _x: 13 * 8, _y: 13 * 8 } ) ) .onEnterFrame = function ( ) {
if ( ( this._x += this.dir.x ) % 8 == 0 && ( this._y += this.dir.y) % 8 == 0 ) {
this._x = ( this._x == 216 && this.dir.x == 2 ) ? 0 : ( this._x == 0 && this.dir.x == -2 ) ? 216 : this._x;
possible = [];
if (
!_root["t_"+(((this._x>>3)+1)+((this._y>>3)*28))].
occ && this.dir.x ! =-2 ) possible.push ( { x: 2, y: 0 } ) ;
if (
!_root["t_"+(((this._x>>3)-1)+((this._y>>3)*28))].
occ && this.dir.x ! = 2 ) possible.push ( { x:-2, y: 0 } ) ;
if (
!_root["t_"+((this._x>>3)+(((this._y>>3)+1)*28))].
occ && this.dir.y ! =-2 ) possible.push ( { x: 0, y: 2 } ) ;
if (
!_root["t_"+((this._x>>3)+(((this._y>>3)-1)*28))].
occ && this.dir.y ! = 2 ) possible.push ( { x: 0, y:-2 } ) ;
this.dir = possible[ random( possible.length ) ];
}
if ( _root.gameover || ( _root.gameover = ( ( this._x-(p =
_root.player)._x)*(this._x-p._x)+(this._y-p._y)*(t
his._y-p._y)<64))) {
trace( " GAME OVER." ) ;
delete this.onEnterFrame;
delete p.onEnterFrame;
}
}
}
t´avais vraiment besoin de copier coller le code une deuxième fois ?
Les retours à la lignes ne correspondent pas au code ASP, et c´est la merde pour debugger.
J´ai cette erreur :
Séquence = Séquence 1, Calque = Calque 1, Image = 1 : Ligne 27 : ´)´ attendu
if (
!_root["t_"+(((this._x>>3)+1)+((this._y>>3)*28))].
occ && this.dir.x ! =-2 ) possible.push ( { x: 2, y: 0 } ) ;
A propos cette ligne semble proposer la structure :
if ( condition) effets;
La forme :
if ( condition){effets;}
n´est-elle pas nécessaire ?
Nan nan ! la ligne est bonne, mais les retours chariots sont importants : pas moyen d´indenter le code sur ce forum
Je t´ai mis en ligne le fla incluant le bon code.
Le codage a été fait par André-Michelle
http://grafikdezign.free.fr/flashkit/pacman.fla
Merci je vais le télécharger.
Donc on peut se passer des accolades après un if() ?