Fps counter Cocos2D et Intelligence artificiel
yoki
Membre
Bonjour, je suis en train de programmer un jeu avec cocos 2D et j'ai quelque question a vous poser :
1) le nombre qui se trouve en bas a gauche de l'écran du simulateur (avec cocos2D) représente fps counter ? si oui sa sert a quoi ? et si il est haut qu'est ce que ça veut dire.
apres avoir chercher sur le net j'ai supposer que plus il était haut et mieux c'est pour le jeu mais je sais pas pourquoi ?
2) en generale le fps est a 60 quand je stimule mon intelligence artificiel elle baisse a 30 ?
est ce normal?
Sachant que mon Intelligence artificiel a pour but d'arrêter les balle qui entre.
je pense que que mon code n'est pas du tout optimiser quelqu'un peut maider a l'optimiser :
et me dire pk ça ralentit mon fps ?
self.sun represent la ball
if( self.sun.position.x >160 && self.sun.position.x <320 && self.sun.position.y<250) {
int casBall=0;
int casPersoFond=0;
int x=0;
NSLog(@balle detecter pres du but du fond !);
if (self.sun.position.x <=213){
NSLog(@Ball dans le Cas A !);
casBall=1;
}
else if (self.sun.position.x>213 && self.sun.position.x<267){
NSLog(@Ball dans le Cas B !);
casBall=2;
}
else if (self.sun.position.x>=267){
NSLog(@Ball dans le Cas C !);
casBall=3;
}
else {
NSLog(@Detection ball (cas) probleme !);
}
if (self.persoFond.position.x <=213){
NSLog(@perso au fond dans Cas A !);
casPersoFond=1;
}
else if (self.persoFond.position.x>213 && self.persoFond.position.x<267){
NSLog(@perso au fond dans Cas B !);
casPersoFond=2;
}
else if (self.persoFond.position.x>=267){
NSLog(@perso au fond dans Cas C !);
casPersoFond=3;
}
else {
NSLog(@Detection perso fond (cas) probleme !);
}
if(casBall==casPersoFond){
NSLog(@perso fond ne bouge pas !);
//balle continue de bouger !
}
else {
switch (casBall){
case 1:
x =arc4random() % 53 + 160;
break;
case 2:
x =arc4random() % 54 + 213;
break;
case 3:
x =arc4random() % 53 + 267;
break;
default:
NSLog(@perso pas deplacer !);
break;
}
id moveDef = [CCMoveTo actionWithDuration:1.0 position:ccp(x,290)];
id callback =[CCCallFunc actionWithTarget:self selector:@selector(action_finished)];
color=#c22a9f]self[/color].[color=#478186]persoFond[/color] [color=#2b595d]runAction[/color]:[[color=#478186]CCSequence[/color] [color=#2b595d]actions[/color]:moveDef,callback,[color=#c22a9f]nil[/color];
}
}
Merci d'avance de votre aide /smile.png' class='bbc_emoticon' alt=':)' />
1) le nombre qui se trouve en bas a gauche de l'écran du simulateur (avec cocos2D) représente fps counter ? si oui sa sert a quoi ? et si il est haut qu'est ce que ça veut dire.
apres avoir chercher sur le net j'ai supposer que plus il était haut et mieux c'est pour le jeu mais je sais pas pourquoi ?
2) en generale le fps est a 60 quand je stimule mon intelligence artificiel elle baisse a 30 ?
est ce normal?
Sachant que mon Intelligence artificiel a pour but d'arrêter les balle qui entre.
je pense que que mon code n'est pas du tout optimiser quelqu'un peut maider a l'optimiser :
et me dire pk ça ralentit mon fps ?
self.sun represent la ball
if( self.sun.position.x >160 && self.sun.position.x <320 && self.sun.position.y<250) {
int casBall=0;
int casPersoFond=0;
int x=0;
NSLog(@balle detecter pres du but du fond !);
if (self.sun.position.x <=213){
NSLog(@Ball dans le Cas A !);
casBall=1;
}
else if (self.sun.position.x>213 && self.sun.position.x<267){
NSLog(@Ball dans le Cas B !);
casBall=2;
}
else if (self.sun.position.x>=267){
NSLog(@Ball dans le Cas C !);
casBall=3;
}
else {
NSLog(@Detection ball (cas) probleme !);
}
if (self.persoFond.position.x <=213){
NSLog(@perso au fond dans Cas A !);
casPersoFond=1;
}
else if (self.persoFond.position.x>213 && self.persoFond.position.x<267){
NSLog(@perso au fond dans Cas B !);
casPersoFond=2;
}
else if (self.persoFond.position.x>=267){
NSLog(@perso au fond dans Cas C !);
casPersoFond=3;
}
else {
NSLog(@Detection perso fond (cas) probleme !);
}
if(casBall==casPersoFond){
NSLog(@perso fond ne bouge pas !);
//balle continue de bouger !
}
else {
switch (casBall){
case 1:
x =arc4random() % 53 + 160;
break;
case 2:
x =arc4random() % 54 + 213;
break;
case 3:
x =arc4random() % 53 + 267;
break;
default:
NSLog(@perso pas deplacer !);
break;
}
id moveDef = [CCMoveTo actionWithDuration:1.0 position:ccp(x,290)];
id callback =[CCCallFunc actionWithTarget:self selector:@selector(action_finished)];
color=#c22a9f]self[/color].[color=#478186]persoFond[/color] [color=#2b595d]runAction[/color]:[[color=#478186]CCSequence[/color] [color=#2b595d]actions[/color]:moveDef,callback,[color=#c22a9f]nil[/color];
}
}
Merci d'avance de votre aide /smile.png' class='bbc_emoticon' alt=':)' />
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Le fps est le nombre d'images affichées à l'écran par seconde. Un jeu est parfaitement fluide avec 60 images/s. Le moteur d'affichage de Coco2D passe à 30 images/s quand il n'a pas le temps de "fabriquer" 60 images. A titre de comparaison, le cinéma c'est 24 images/s ! Si le fps devient trop faible, le cerveau perd l'illusion de la fluidité et l'animation semble saccadé.
Je ne connais pas Coco2D, alors je ne peut pas t'aider directement. Par contre j'ai constaté que les NSLog ralentissent énormément l'affichage d'un jeu OpenGL. Ne me demande pas pourquoi ! Il est aussi possible que le callback consomme beaucoup de temps. Simplifie ton code et fait des tests pour voir ce qui ralentit l'exécution.
et merci pour ton explication sur le fps.
je reste ouvert a toute proposition pour optimiser mon code car je le trouve assez long...
et un jeux pour bien fonctionner dois tourner aux alentour de combien ?
car au fur et a mesure que je rajoute des options dans mon niveau 1 par exemple ben le fps baisse...
Un bon fps sur iPhone/iPad tourne entre 30 et 60. En dessous de 30, le joueur peut éprouver une sensation de lag. Mais c'est subjectif dépendant aussi du type de jeu, de nombre d'objets animés à l'écran, de leurs tailles, de la différence de couleurs entre les animations et le fond d'écran, etc. Le seuil de perception de lag est différent selon chaque personne.
Sinon le secret c'est d'éviter les affichages inutiles et les calculs prenant trop de temps. Il n'y a pas de recette magique pour ça, juste du travail et des tests. Beaucoup de travail et beaucoup de tests..
Il faut surtout éviter de faire perdre inutilement du temps au processeur.
Connais-tu le RTS Age Of Empire sur PC ? C'est un jeu de stratégie simulant un petit univers où des centaines d'unités "vivent" leurs vies en temps réel, sous les yeux du joueur. Les bucherons coupent des arbres, les mineurs creusent la terre, les paysans cultivent les champs, les pécheurs lancent leurs filets, les navires voguent sur l'eau, les soldats combattent les armées ennemis, etc.. Très impressionnant, sauf que .. les unités du joueur sont d'une incroyable stupidité !
Les paysans continuent leurs travaux, même si un ennemi s'approche pour passer à l'attaque. Un combattant peut faire un massacre, si le joueur n'intervient pas. Et il a souvent fort à faire dans une autre partie de la carte, ne revenant que plus tard que pour constater le carnage ! Pourquoi ? Parce que les paysans et autres péons de base sont AVEUGLES, afin d'économiser le temps machine.