Posté le 12/05/2020 15:05
Planète Casio v4.3 © créé par Neuronix et Muelsaco 2004 - 2024 | Il y a 100 connectés | Nous contacter | Qui sommes-nous ? | Licences et remerciements
Planète Casio est un site communautaire non affilié à Casio. Toute reproduction de Planète Casio, même partielle, est interdite.
Les programmes et autres publications présentes sur Planète Casio restent la propriété de leurs auteurs et peuvent être soumis à des licences ou copyrights.
CASIO est une marque déposée par CASIO Computer Co., Ltd
Citer : Posté le 21/05/2020 12:56 | #
Aucune chance que ça marche... ça n'a même pas vraiment de sens. Tu voudrais que ça renvoie quoi le code ci-dessous ?
10→B
Mat 10
Citer : Posté le 21/05/2020 13:03 | #
Yes!
It is possible.
[[1,13,8]]->Mat @A
Mat @A // same as Mat J
Mat @10 // same as Mat J
If A is 10, then Mat @A is the same as Mat J in the 10th Matrix.
Overclocking utilitaire Ftune/Ptune2/Ptune3 est également disponible.
Si vous avez des questions ou un rapport de bogue, n'hésitez pas à me le faire savoir.
Citer : Posté le 21/05/2020 13:09 | #
@Sentaro21
Thank you ! This is exactly what I was looking for !
I have one last question before I release the software beta, how we do to return a bitmap (horizontal flip).
For example Mario turns to the right and to the left but using only one image.
Albert Einstein
Citer : Posté le 21/05/2020 13:31 | #
Sorry, C.Basic doesn't have a horizontal/vertical flip function.
Currently, it's best way to have both patterns, right and left facing.
Overclocking utilitaire Ftune/Ptune2/Ptune3 est également disponible.
Si vous avez des questions ou un rapport de bogue, n'hésitez pas à me le faire savoir.
Citer : Posté le 21/05/2020 15:20 | #
Sorry, C.Basic doesn't have a horizontal/vertical flip function.
Currently, it's best way to have both patterns, right and left facing.
Ok, thank you.
Ajouté le 21/05/2020 à 15:41 :
Malgré tous vos conseils, j'ai essayé d'optimiser au maximum le programme, il est toujours lent !
Je ne comprends pas, je vais devenir fou, ça fait une semaine que j'essaye de le rendre fluide et je n'y parviens pas
Si quelqu'un peut m'aider à résoudre ce problème.
Je vous transmet les fichier pour casio et voici un descriptif de comment le programme fonctionne:
Nous avons plusieurs fichier dont Unity2D.g1m qui est celui qui faut lancer pour faire fonctionner le programme.
BoxColi,RigdBoby,CtrlPlat sont des Components, en gros c'est des attributs.
Par exemple le perso principal possède BoxColi,RigdBoby,CtrlPlat car il a une collision, il est soumis a la gravité et on peut le controller.
Mais tous les éléments du décor ne possèdent pas CtrlPlat car on les contrôle pas.
Les éléments sont stockés dans des Listes de la 11ème jusqu'à la fin.
Chaque éléments quand ils sont chargé est stocké dans la Liste 2 que l'ont peut modifier.
Voici comment est stocké une Liste:
[1]=nombre total de paramètre de l'élément
[2]=ind Type
[3]=Image
[4]=ind name
[5]=show
[6]=x
[7]=y
[8]=w
[9]=h
[10]=rotation de l'image
[11]=L'objet est Static
+nb total de component
+Position début d'un component
[...] fait pour chaque component
+données des component
[...]fait pour chaque component
Component:
[1]:actif
[2]:name
[..]
La Liste 1 sert au fonctionnement du système général
[1]=splash screens
[2]=Scene
[3]=nb d'élément sur la scene
[4]=CamX
[5]=CamY
[6] = selection de l'element
[7] = selection de l'image à afficher
[8] = numéro de la liste où commence les éléments
[9] = numéro où commence les parametres du Component selectionné
[10]= numéro où termine les parametres du Component selectionné
[11] = numéro où commence les parametres du Component qu'on a voulu chercher
[12] = numéro où termine les parametres du Component qu'on a voulu chercher
[13] = nom du Component qu'on a voulu chercher
[14] = en train de chercher
[15] = Tick de chargement
[16] = le Component qu'on a voulu chercher est trouvé
[17] = élément au quel on cherche le Component que lui aussi on cherche
[18] = Début de stockage des images dans des matrices
FndCompo sert à chercher les paramètre d'un Component
Et voici d'autres variables utilisés:
List 3 : Données du Component sélectionnée
List 4 : Données de l'élément ou du Component qu'on a voulu chercher
List 5 : Element actuellement chargé
List 6 : ordre des élément à afficher
List 7 : liste poubelle
Str 1 : nom de l'élément
Str 2 : Type de l'élément
Str 3 : nom du Component
Str 4 : nom de l'élément ou du Component qu'on a voulu chercher
str 5 : variable poubelle
Je pense avoir fini sur l'explication du fonctionnement du programme.
Merci d'avance a ceux qui voudront bien m'aider à résoudre le problème de la lenteur du programme.
Albert Einstein
Citer : Posté le 21/05/2020 15:43 | # | Fichier joint
voici les fichiers
Albert Einstein
Citer : Posté le 22/05/2020 09:47 | #
Bonjour Farhi ! J'ai testé ton programme pour Casio, et en effet on voit le souci en termes de performances. Pour cela, je te propose ce guide non-exhaustif de....
1) La boucle de jeu trop chargée
Oui, je suis Captain Obvious, mais je soupçonne ton jeu d'avoir trop d'instructions exécutées à chaque frame alors qu'on pourrait procéder autrement. Si j'ai bien compris, ton moteur charge la frame suivante élément par élément en lui affectant ses caractéristiques. Or je pense qu'il serait possible d'élargir tout cela en chargeant ensemble tous les éléments qui ont les mêmes caractéristiques (genre les plateformes immobiles).
2) Le BmpLoad() est lent
Oui ! La fonction BmpLoad reste lente, et déjà ca se sentait pour mon Pokémon Obsidienne, pour lequel Sentaro21 m'a fait changer de méthode pour gagner des fps. En effet, je te conseille, au lancement d'une nouvelle partie, de charger tous les sprites de ton jeu (ou du niveau en cours) dans des matrices en faisant :
Et puis pour afficher les sprites, tu utilises la fonction DrawMat :
Normalement, on devrait avoir de bien meilleures performances.
3) Le jeu est exigeant
Avec un platformer aussi poussé, tu places la barre assez haut. En effet, le jeu nécessite des fonctions très gourmandes en termes de puissance (comme le scrolling). Même JTMM de KikooDX (qui est codé en C pour Graph 90) n'a pas de scrolling. Je pense donc qu'il ne faudra pas s'attendre à un miracle.
Dijkstra - The Witcher
Citer : Posté le 22/05/2020 10:01 | #
Même JTMM de KikooDX (qui est codé en C pour Graph 90) n'a pas de scrolling. Je pense donc qu'il ne faudra pas s'attendre à un miracle.
Je t'arrête ici, JTMM n'a pas de scrolling mais tournerait à la même vitesse s'il en avait.
Mais le jeu redessine tout l'écran à chaque frame, et c'est sur 90+E. Lephé avait dit qu'il n'y a aucun problème de vitesse là dessus sur monochrome, donc s'il optimise bien je pense que c'est possible
Cela dit tu as raison sur le reste, il ne faut pas s'attendre à un miracle. Il faudra une très bonne optimisation de code et de moteur pour le scrolling.
Très bonne explication
C'était donc mon intervention
Citer : Posté le 22/05/2020 11:39 | #
Bonjour Lightmare
J'ai lu attentivement tes explication mais il y a plusieurs points qui posent problème par exemple les caractéristiques des éléments :
Vu que c'est un éditeur de jeu, on ne peut pas savoir à l'avance combien il y a d'éléments et quels seront ses caractéristiques (Component), certains bloc sont soumis à la gravité ( dans la démo que j'ai mis, si on reste immobile on voit à gauche un bloc qui tombe cela signifie que lui aussi doit faire le calcule de collision ). Je pense que ce qui prend le plus de performance c'est le calcule de collision et la recherche des données de component avec FndCompo.g1m . Mais le problème c'est que je ne voit pas vraiment comment je peux l'améliorer.
Pour ce qui en est de BmpLoad("image.bmp")->Mat A c'est aussi compliquer car on ne sait pas à l'avance combien d'image il y aura, vu que c'est l'éditeur qui décide de combien il veut en mettre.
Et comme dit @Kikoodx le scrolling ne changerai rien car l'écran est rafraîchis à chaque fois.
Albert Einstein
Citer : Posté le 22/05/2020 13:33 | #
Sur Graph mono, j'ai déjà fait du 500 FPS avec scrolling alors que le moteur de gris de gint était actif. Le benchmark par défaut de FTune2 monte à 600 FPS, et avec overclock tu peux balancer du 2400 FPS.
Il n'y a donc aucun problème fondamental à faire des trucs pétés *et* fluides sur cette plateforme.
Citer : Posté le 22/05/2020 13:57 | #
Donc si j'ai bien compris on peut garder le même Moteur tout en augmentant le nombre de fps ?
Albert Einstein
Citer : Posté le 22/05/2020 14:02 | #
Tout ce que je dis c'est que tu peux certainement optimiser le truc pour que ça atteigne la vitesse dont tu as besoin. Je pense que C.Basic est assez puissant pour ça aussi.
Citer : Posté le 22/05/2020 14:05 | #
D'accord je vais voir où je peux gratter des fps
Albert Einstein
Citer : Posté le 23/05/2020 08:44 | #
BmpLoad is not suitable for real-time drawing.
This is due to the slow loading of files from storage memory.
How much does the performance change if you omit the collision calculation?
I think it's a good idea to start with the simplest program and see how fast it works.
Overclocking utilitaire Ftune/Ptune2/Ptune3 est également disponible.
Si vous avez des questions ou un rapport de bogue, n'hésitez pas à me le faire savoir.
Citer : Posté le 23/05/2020 11:37 | #
I do not know if there is a function that allows to know the number of fps, but at first glance I would say that it is 4 times faster without collision and having put the bitmap in matrices.
Albert Einstein
Citer : Posté le 24/05/2020 11:55 | # | Fichier joint
Unity2DA.g1m
This is the version with the FPS display added at the bottom left.
Unity2DB.g1m
This is the version that displays the bitmap with the _Bmp command.
There is a bug that the part that goes out of the screen is not displayed.
It won't run smoothly without overclocking, but I'm sure there is a solution.
Overclocking utilitaire Ftune/Ptune2/Ptune3 est également disponible.
Si vous avez des questions ou un rapport de bogue, n'hésitez pas à me le faire savoir.
Citer : Posté le 24/05/2020 12:46 | #
Thank you very much, I will test that.
I also managed to reduce the program, I will try to combine the different programs between them.
Ajouté le 24/05/2020 à 15:31 :
il y a un moyen de savoir si un élément est dans la liste du genre :
4 in List 1 //true
Albert Einstein
Citer : Posté le 24/05/2020 16:03 | #
Toujours le bon vieux trick de "calcul listique" pour compter le nombre d'occurences
Sum(List 1=4) > 0 // true
{5,8,9,6}→List 1
Sum(List 1=4) > 0 // false
Citer : Posté le 24/05/2020 18:20 | #
@Lephenixnoir
Merci
Albert Einstein
Citer : Posté le 25/05/2020 15:56 | # | Fichier joint
J'ai fait pas mal de modification et je voulais savoir d'après vous si le jeu est suffisamment fluide pour que je me concentre moins sur l'optimisation et plus sur le système lui même.
Voici les fichiers
Merci d'avance pour vos retours
Albert Einstein
Citer : Posté le 25/05/2020 17:03 | #
Bien joué ! j'ai testé le programme en mode double précision, et les performances sont vraiment meilleures que la première version !
Cependant j'ai encore réussi à avoir des perfs supplémentaires en basculant en mode #INT.
Je pense que le test ultime est de savoir si le nombre d'objets fait gravement chuter les fps ou si ça a peu d'importance. Tu pourrais faire passer ton code python pour des tests ?
Dijkstra - The Witcher