website logo
Auteur
avatar
artblink

Forum » » Création-Développement » » SuperCars PPC


Posté : 19-04-2011 07:43 icone du post

Nouvelle version, nouveau moteur (essai)

Le premier moteur est basé sur la technique des Tiles en direct, la map (ou le circuit) peut donc avoir une taille illimité, puisque j'affiche en direct suivant un tableau de Numéro de brush. C'ette technique m'oblige a effectué 2 boucle For pour afficher 11 brush de 64 pixel de long et 8 brush de 64 pixel de large sois une boucle de 88. (11*8), hors, suite à plusieurs conversation, hollywood ne travail (sur la partie gfx) qu'avec la mémoire vidéo (Aïe) donc j'appel 88 fois des brush stocké en mémoire vidéo vers (à mon avis) une autre zone mémoire vidéo., je me suis donc dis, et si je précalculer, c'est se que j'ai fais dans le deuxième moteur, plus de boucle, je transforme mon tableau de numéro de brush en une gigantesque brush stocké en mémoire GFX soit une image de 30*64pixel de long et de 30*64 pixel de large, puis par l'intermédiaire d'une seul commande, je copie une zone de la carte de 640*480 vers l'affichage, donc de 88 appel, j'en passe à une seul, le problème, c'est que la carte ou le circuit n'a plus de taille illimité car elle dépendra de la taille de la mémoire gfx. Je me suis dis aussi, tiens, déplacer 640x480 pixel, sur certain amiga sa risque de ramer, d'ou le troisième moteur ou je découpe en 4 partie les 640x480 (en part égale) que je transfert vers l'affichage, donc 4 commandes qui je pense permettrons un copier coller plus rapide vu le nombre de pixel à transferer.

Voici donc le lien vers le moteur précalculation de la carte+affichage en 4 partie de 320x240 aux coordonnées:

0,0
320,0
0,240
320,240

Donc la méthode c'est :

Je créé une brush de la taille de la carte, je positionne les brush pour former le circuit selon une table grace à la boucle de 88, affichage avec displaybrush.

Une fois la brosse créé, je lance la function principale et à l'endroit du scroll, je remplace:


Local?TileX=Int(X/64)
Local?TileY=Int(Y/64)

If?TileX<0?Then?TileX=0
If?tileX>19?Then?TileX=19
If?TileY<0?Then?TileY=0
If?tileY>20?Then?TileY=21

For?Local?RowCtr=TileY?To?8+TileY
For?Local?ColCtr=tileX?To?10+tileX?

Local?TileNum=Circuit[RowCtr][ColCtr]
Local?TilePointX=(ColCtr*64)-X
Local?TilePointY=(RowCtr*64)-Y

DisplayBrush(TileNum,TilePointX,TilePointY)

Next
Next



par sa :



DisplayBrushPart(20,X,Y,0,0,320,240)
DisplayBrushPart(20,X+320,Y,320,0,320,240)
DisplayBrushPart(20,X,Y+240,0,240,320,240)
DisplayBrushPart(20,X+320,Y+240,320,240,320,240)



Bon, j'imagine que normalement le moteur devrait être plus rapide surtout qu'il y a peux de différence (vitesse d'exécution) entre Displaybrush et displaybrushpart

http://jeannoel.roueste.free.fr/Amiga/SuperCarsNG/SuperCarsEngine2 _AOS4.exe


Pouvez-vous me retourner les FPS ? merci

Sur mon microAone, je bloque à 31 FPS, si quelqu'un pouvait tester sur son microAone, se serai cool ... Euh! Sinisrus... tu peux essayer tcho caillin?

@Tarzin:

Evite absolument les commandes de traçage comme circle,line,box, pour créer des décors de jeux (dans la boucle principale, si c'est de la précalcuation, c'est ok), trop lent, mon indicateur de vitesse par exemple, celui avec l'aiguille, quand je l'enlève sur PC, je passe de 333 FPS à 500 FPS!!!!!!
Message édité par : artblink / 19-04-2011 07:51

Cet article provient de Le site des utilisateurs francophones actuels et futurs d'AmigaOS 4.x
https://amiga-ng.org/viewtopic.php?topic=1014&forum=14