stefbuet
Messages postés576Date d'inscriptionmercredi 5 janvier 2005StatutMembreDernière intervention12 mai 2009 18 févr. 2009 à 01:25
La source citée plus haut n'est pas vraiment un véritable algo de cinematique inverse mais une simplification, cependant elle suffit pour ici, je supose.
Cette page explique très bien le concept de l'IK:
http://freespace.virgin.net/hugo.elias/models/m_ik.htm
Thx :)
Le jeu a été renommé en "Darwin" il y a qques jours, et il ne sera plus open-source... Mais il sera multi-joueur.
On commence avec une creature basique, on joue sur plusieurs niveaux, avec des difficultées qui augmentent (les IA de plus en plus intelligente, des enemies de plus en plus rapide et puissant, ...)
Lorsqu'on passe un niveau, on obtient un nombre de points qui sont stockés.
On peut utiliser ces points quand on le souhaite pour les echanger contre des mutations, dont le prix varie. Les mutations aident à survivre (meilleurs vision, vitesse, force, ou simplement design et apparrence).
Pour la creature elle meme et ses propriété, il y a une 15aine de variables.
Pour les couleurs, il ya pres de 20 variables, pour pouvoir creer des couleurs et des effets uniques.
Le tout dans un editeur assez simple mais puissant.
J'en suis à 70% du dev...
On pourra jouer dans les niveau pour faire evoluer sa creature, puis combattre les creature des autres dans des arenes, et faire de la reproduction: On choisi deux créatures, et on en obtient un hybride.
top30
Messages postés1158Date d'inscriptionvendredi 21 février 2003StatutMembreDernière intervention 6 août 2010 17 févr. 2009 à 20:05
Autre conseil appel ton jeu "Life" ou "DNA" mais prend pas le nom d'un jeu existant... Imagine toi que ton "openSource" ai du succés, tu devras payer !
Et c'est bien dommage que quelqu'un comme toi ne soit pas à l'AS3. C'est vraiment pas dur, par contre plus stricte. Te connaissant (un tout petit peu si si) tu devrais pouvoir adapter tres tres rapidemement.
Puisque tu dis que ton jeu sera openSource je vais t'aider un peu de ma "vision" des choses pour te simplifier l'evolution de ton jeu.
Le plus petite animal de tous pourrait être une "cellule":
Cellule.vie ( de 0 à 1, 0:mort, 1:au max de sa forme)
Cellule.age ( de 0 à 1, 0:nouveau né 1:mort )
Cellule.benefice(une propriété gagnée/augmentée par ingestion de la cellule)
Cellule.deficite(une propriété altérée/perdue par ingestion de la cellule)
Cellule.gain (la quantité de la qualité affectée)
Cellule.perte (la quantité du default affecté)
Propriétés/defaut des animaux:
- Perception (visuelle, radar, olfative)
- Croissance (bloc pour un serpent, dent pour un carnivore, etc...)
- Deplacement (Vitesse, forme, environnment)
- Couleur (Un animal jaune dans une eau bleue se verra plus qu'un autre bleu)
Certains animaux pouvant être l'évolution d'une cellule, d'autre pouvant être composé d'un ensemble de cellules...
Tes animaux devant aussi être capable de réagir aux sentiments les plus basiques:
- Plaisir (manger telle nourriture)
Le plaisir, par exemple, pourrait "freiner" le vieillissement de ton animal.
- Peur (Environnment sans nouriture, être mangé)
La peur pouvant entrainer prématurément la mort si trop longtemps...
- Sans effet (Glander dans l'eau)
Ils doivent avoir une "mémoire" pouvant être associé à la quantité de cellules les composants.
La mémoire stockant les situations rencontrées:
- Acteur/Environnment/Date= Sentiment
Quand un animal rencontre une situation, il memorise si le peut**:
- le ou les acteurs
- le lieux
- la date,
- etc..
et surtout le resultat :Peur/Plaisir
(La perte d'un deficite pouvant ainsi être considéré comme bénéfice)
Quand ton animal rencontre une nouvelle situation (affectation des sentiment), ton animal pourra réagir (ou non) selon l'analyse de sa memoire.
Predateur dans champ de vision= PEUR
Peur= augmentation de le rapidité de déplacement
AugmentationRapidité= digestion plus rapide...
La mémoire de certain pouvant être des piles ou des queue, ou une election de la suppression si saturation...
Bref avant de t'attaquer au "graphisme" du devrait plancher tres tres FORT sur un aspect "code" super évolutif et surtout quasi commun à tout animal...
A plus et bon courage....
pegase31
Messages postés6138Date d'inscriptiondimanche 21 décembre 2003StatutModérateurDernière intervention 4 septembre 201312 16 févr. 2009 à 09:01
Ce serait justement l'occasion de passer à l'AS3 .. l'AS2 ça n'évoluera plus et tu ne poura pas bénéficier des ajouts des dernières versions (en gros, rester sur flash 8)
Peg' ;)
Le plus dur c'est le passage, après c'est que du bonheur !
Hello
merci pour cette solution.
Par contre, le code proposé en illustration est en AS3, qui je ne connais pas du tout...
Mais j'ai compris le principe. Je vais essayer d'adapter... ça demande un re-écriture assez large du code de la class spore.as
Je vais voir ça...
stefbuet
Messages postés576Date d'inscriptionmercredi 5 janvier 2005StatutMembreDernière intervention12 mai 2009 15 févr. 2009 à 00:58
Pour la tête j'aurais une idée. Représente chaque morceau par une class.
Chaque morceau de la chenille (object) doit avoir 3 propriétées : speed (object {x:y}), position (object {x:y}) et child (objet morceau de chenille).
A chaque rafraichissement de ton ecran, chaque fois que tu a calculer des nouvelles positions, tu modifi seulement la vitesse et l'angle du premier morceau de la chenille. Celui ci va, si il à un enfant (child) modifier au prochain update la vitesse & angle de son enfant en lui attribuant les valeur que l'on lui donne en ce moment même.
Un petit exemple (pas testé, juste pour le concept)
Désolé si je fait des erreurs de syntaxe ça fait quelques mois que je suis plongé profondement dans le C++ pour un gros projet...
package {
class Chenille {
private var child:MorceauChenille;
private var speed:int, angle:int;
public function Chenille (x:int=0, y:int=0, angle:int=0, speed:int=0) {
child=new MorceauChenille(x,y,angle,speed);
}
public function update(newSpeed:int, newAngle:int) {
child.update(newSpeed, newAngle);
}
public function addBlock() {
child.addBlock();
}
}//fin class
}//fin package
package {
class MorceauChenille {
private var speed:int, x:int, y:int, angle:int, speed:int;
private var lastSpeed:int, lastAngle:int;
private var firstMove:bool;
private var child:MorceauChenille;
public function MorceauChenille($x:int,$y:int,$angle:int,$speed:int) {
x=$x;
y=$y;
angle=$angle;
speed=$speed;
firstMove=true;
}
public function update(newSpeed:int, newAngle:int):void {
angle=newAngle;
speed=newSpeed;
//après on calcul la nouvelle position en fonction rayon cercle angle & vitesse
//pour le concept on dira que le rayon est de 20...
x+=Math.cos(angle)*speed;
y+=Math.sin(angle)*speed;
if(firstMove) {
firstMove=false;
}
else {
if(child) {
child.update(lastSpeed, lastAngle);
}
}
lastSpeed=speed;
lastAngle=angle;
}
public function setChild(newChild:MorceauChenille):void {
child=newChild;
}
public function getPosition():Object {
return({X:x,Y:y});
}
public function addBlock():void {
if(!child) {
child=new MorceauChenille(x,y,angle,0);
}
else {
child.addBlock();
}
}
}//fin class
}//fin package
Voila, mais j'ai du faire pas mal d'erreur.
Et puis j'avais vu qu'avec CS4 on pouvais utiliser des vector... mais j'ai pas vraiment regardé encore toutes les nouveautés Fl pour le moment.
Stef
public
pegase31
Messages postés6138Date d'inscriptiondimanche 21 décembre 2003StatutModérateurDernière intervention 4 septembre 201312 14 févr. 2009 à 20:20
Pour ce qui est de la tête, je te conseille de ne pas modifier le clip, mais la première phase de la tête qui donnera ses instructions au reste du corps (stockés dans un tableau).
Par contre, il va falloir réduire les rotations à certains angles pour éviter de voir la tête rentrer dans le corps.
Pour ce qui est des boutons, il y a une méthode simple :
- Déterminer quelle touche est appuyée
- stocker la variable à "1"
- lors du relâchement, la mettre à 0
- faire tourner un script qui modifie le déplacement en fonction des "1/0" déterminés.
hello,
Je suis tout à fait d'accord avec tes remarques, et je cherche des solutions pour corriger.
Pour la queue qui fait des derapages, c'est parsque chaque creature est encapsulée dans un movieclip, et les coordonnées (0;0) correspondent à la tete. Donc, quand on tourne (_rotation), c'est la tete qui fait tourner le tout.
Je vais corriger ça en modifiant le principe de rotation, pour que le reste du corps puisse suivre de façon realiste.
Pour les touches de direction, je ne me souvient pas d'une autre solution que mettre un addListener sur un object. Du coup, c'est pas super fluide...
Je vais uploader une nouvelle version d'ici qques minutes, le temps de tester (creatures dans un fichier xml externe et IA bien plus rapide).
Pour jouer, il suffit de manger les petites creatures en evitant de se faire manger.
Il faut remplir la barre rouge (chaque creature mangée remplis un peut plus la barre)
pegase31
Messages postés6138Date d'inscriptiondimanche 21 décembre 2003StatutModérateurDernière intervention 4 septembre 201312 14 févr. 2009 à 19:17
je vais peut-être jouer les chiants, mais il y a 2 choses qui me chagrinent dans l'ergonomie de ton jeu :
- pourquoi la bestiole de base à la queue qui fait des dérapages ?
- Pourquoi ne gères-tu pas l'appuie/relâchement des touches de direction pour la faire tourner de façon fluide ?
Sinon c'est graphiquement beau mais j'ai toujours pas compris comment jouer ..
Un site dedié au jeu est en cours de création; Creation d'une cellule, au fur et à mesure des niveaux, on gagne un nombre de mutation, à utiliser comme on souhaite dans l'éditeur pour faire evoluer sa creature.
Il y a pres d'une 50aine de variables differentes pouvant être modifiées, pour creer des combinaisons uniques de formes, de couleurs, de propriétés.
Stockages des créatures en DB.
Mode arene pour faire combattre sa créature contre les créatures des autres (dans ce cas, l'IA prend la main sur l'utilisateur).
Identification via facebook Connect.
Bientot en ligne :)
Le code sera open-source.
Laissez des commentaires sur la source et le code :)
18 févr. 2009 à 01:25
Cette page explique très bien le concept de l'IK:
http://freespace.virgin.net/hugo.elias/models/m_ik.htm
Stef.
17 févr. 2009 à 20:26
Le jeu a été renommé en "Darwin" il y a qques jours, et il ne sera plus open-source... Mais il sera multi-joueur.
On commence avec une creature basique, on joue sur plusieurs niveaux, avec des difficultées qui augmentent (les IA de plus en plus intelligente, des enemies de plus en plus rapide et puissant, ...)
Lorsqu'on passe un niveau, on obtient un nombre de points qui sont stockés.
On peut utiliser ces points quand on le souhaite pour les echanger contre des mutations, dont le prix varie. Les mutations aident à survivre (meilleurs vision, vitesse, force, ou simplement design et apparrence).
Pour la creature elle meme et ses propriété, il y a une 15aine de variables.
Pour les couleurs, il ya pres de 20 variables, pour pouvoir creer des couleurs et des effets uniques.
Le tout dans un editeur assez simple mais puissant.
J'en suis à 70% du dev...
On pourra jouer dans les niveau pour faire evoluer sa creature, puis combattre les creature des autres dans des arenes, et faire de la reproduction: On choisi deux créatures, et on en obtient un hybride.
17 févr. 2009 à 20:05
Ca pour résoudre ton problème de "clavier"
http://www.flashkod.com/codes/CINEMATIQUE-INVERSE-DEPLACEMENT-DYNAMIQUE-BOUCLE-FOR-LINESTYLE_46756.aspx
Pour t'aider dans le concept de tes "vertebres"...
Autre conseil appel ton jeu "Life" ou "DNA" mais prend pas le nom d'un jeu existant... Imagine toi que ton "openSource" ai du succés, tu devras payer !
Et c'est bien dommage que quelqu'un comme toi ne soit pas à l'AS3. C'est vraiment pas dur, par contre plus stricte. Te connaissant (un tout petit peu si si) tu devrais pouvoir adapter tres tres rapidemement.
Puisque tu dis que ton jeu sera openSource je vais t'aider un peu de ma "vision" des choses pour te simplifier l'evolution de ton jeu.
Le plus petite animal de tous pourrait être une "cellule":
Cellule.vie ( de 0 à 1, 0:mort, 1:au max de sa forme)
Cellule.age ( de 0 à 1, 0:nouveau né 1:mort )
Cellule.benefice(une propriété gagnée/augmentée par ingestion de la cellule)
Cellule.deficite(une propriété altérée/perdue par ingestion de la cellule)
Cellule.gain (la quantité de la qualité affectée)
Cellule.perte (la quantité du default affecté)
Propriétés/defaut des animaux:
- Perception (visuelle, radar, olfative)
- Croissance (bloc pour un serpent, dent pour un carnivore, etc...)
- Deplacement (Vitesse, forme, environnment)
- Couleur (Un animal jaune dans une eau bleue se verra plus qu'un autre bleu)
Certains animaux pouvant être l'évolution d'une cellule, d'autre pouvant être composé d'un ensemble de cellules...
Tes animaux devant aussi être capable de réagir aux sentiments les plus basiques:
- Plaisir (manger telle nourriture)
Le plaisir, par exemple, pourrait "freiner" le vieillissement de ton animal.
- Peur (Environnment sans nouriture, être mangé)
La peur pouvant entrainer prématurément la mort si trop longtemps...
- Sans effet (Glander dans l'eau)
Ils doivent avoir une "mémoire" pouvant être associé à la quantité de cellules les composants.
La mémoire stockant les situations rencontrées:
- Acteur/Environnment/Date= Sentiment
Quand un animal rencontre une situation, il memorise si le peut**:
- le ou les acteurs
- le lieux
- la date,
- etc..
et surtout le resultat :Peur/Plaisir
(La perte d'un deficite pouvant ainsi être considéré comme bénéfice)
Quand ton animal rencontre une nouvelle situation (affectation des sentiment), ton animal pourra réagir (ou non) selon l'analyse de sa memoire.
Predateur dans champ de vision= PEUR
Peur= augmentation de le rapidité de déplacement
AugmentationRapidité= digestion plus rapide...
La mémoire de certain pouvant être des piles ou des queue, ou une election de la suppression si saturation...
Bref avant de t'attaquer au "graphisme" du devrait plancher tres tres FORT sur un aspect "code" super évolutif et surtout quasi commun à tout animal...
A plus et bon courage....
16 févr. 2009 à 09:01
Peg' ;)
Le plus dur c'est le passage, après c'est que du bonheur !
15 févr. 2009 à 09:20
merci pour cette solution.
Par contre, le code proposé en illustration est en AS3, qui je ne connais pas du tout...
Mais j'ai compris le principe. Je vais essayer d'adapter... ça demande un re-écriture assez large du code de la class spore.as
Je vais voir ça...
15 févr. 2009 à 00:58
Chaque morceau de la chenille (object) doit avoir 3 propriétées : speed (object {x:y}), position (object {x:y}) et child (objet morceau de chenille).
A chaque rafraichissement de ton ecran, chaque fois que tu a calculer des nouvelles positions, tu modifi seulement la vitesse et l'angle du premier morceau de la chenille. Celui ci va, si il à un enfant (child) modifier au prochain update la vitesse & angle de son enfant en lui attribuant les valeur que l'on lui donne en ce moment même.
Un petit exemple (pas testé, juste pour le concept)
Désolé si je fait des erreurs de syntaxe ça fait quelques mois que je suis plongé profondement dans le C++ pour un gros projet...
package {
class Chenille {
private var child:MorceauChenille;
private var speed:int, angle:int;
public function Chenille (x:int=0, y:int=0, angle:int=0, speed:int=0) {
child=new MorceauChenille(x,y,angle,speed);
}
public function update(newSpeed:int, newAngle:int) {
child.update(newSpeed, newAngle);
}
public function addBlock() {
child.addBlock();
}
}//fin class
}//fin package
package {
class MorceauChenille {
private var speed:int, x:int, y:int, angle:int, speed:int;
private var lastSpeed:int, lastAngle:int;
private var firstMove:bool;
private var child:MorceauChenille;
public function MorceauChenille($x:int,$y:int,$angle:int,$speed:int) {
x=$x;
y=$y;
angle=$angle;
speed=$speed;
firstMove=true;
}
public function update(newSpeed:int, newAngle:int):void {
angle=newAngle;
speed=newSpeed;
//après on calcul la nouvelle position en fonction rayon cercle angle & vitesse
//pour le concept on dira que le rayon est de 20...
x+=Math.cos(angle)*speed;
y+=Math.sin(angle)*speed;
if(firstMove) {
firstMove=false;
}
else {
if(child) {
child.update(lastSpeed, lastAngle);
}
}
lastSpeed=speed;
lastAngle=angle;
}
public function setChild(newChild:MorceauChenille):void {
child=newChild;
}
public function getPosition():Object {
return({X:x,Y:y});
}
public function addBlock():void {
if(!child) {
child=new MorceauChenille(x,y,angle,0);
}
else {
child.addBlock();
}
}
}//fin class
}//fin package
Voila, mais j'ai du faire pas mal d'erreur.
Et puis j'avais vu qu'avec CS4 on pouvais utiliser des vector... mais j'ai pas vraiment regardé encore toutes les nouveautés Fl pour le moment.
Stef
public
14 févr. 2009 à 20:20
Par contre, il va falloir réduire les rotations à certains angles pour éviter de voir la tête rentrer dans le corps.
Pour ce qui est des boutons, il y a une méthode simple :
- Déterminer quelle touche est appuyée
- stocker la variable à "1"
- lors du relâchement, la mettre à 0
- faire tourner un script qui modifie le déplacement en fonction des "1/0" déterminés.
Plus de soucis de répétitions à la con.
Peg'
14 févr. 2009 à 20:07
Je suis tout à fait d'accord avec tes remarques, et je cherche des solutions pour corriger.
Pour la queue qui fait des derapages, c'est parsque chaque creature est encapsulée dans un movieclip, et les coordonnées (0;0) correspondent à la tete. Donc, quand on tourne (_rotation), c'est la tete qui fait tourner le tout.
Je vais corriger ça en modifiant le principe de rotation, pour que le reste du corps puisse suivre de façon realiste.
Pour les touches de direction, je ne me souvient pas d'une autre solution que mettre un addListener sur un object. Du coup, c'est pas super fluide...
PS: Demo des dernieres version: http://www.blackwizzard.com/spore/spore.html
Je vais uploader une nouvelle version d'ici qques minutes, le temps de tester (creatures dans un fichier xml externe et IA bien plus rapide).
Pour jouer, il suffit de manger les petites creatures en evitant de se faire manger.
Il faut remplir la barre rouge (chaque creature mangée remplis un peut plus la barre)
14 févr. 2009 à 19:17
- pourquoi la bestiole de base à la queue qui fait des dérapages ?
- Pourquoi ne gères-tu pas l'appuie/relâchement des touches de direction pour la faire tourner de façon fluide ?
Sinon c'est graphiquement beau mais j'ai toujours pas compris comment jouer ..
Peg'
14 févr. 2009 à 16:59
Il y a pres d'une 50aine de variables differentes pouvant être modifiées, pour creer des combinaisons uniques de formes, de couleurs, de propriétés.
Stockages des créatures en DB.
Mode arene pour faire combattre sa créature contre les créatures des autres (dans ce cas, l'IA prend la main sur l'utilisateur).
Identification via facebook Connect.
Bientot en ligne :)
Le code sera open-source.
Laissez des commentaires sur la source et le code :)