
Un truc que j'aimerais bien faire, mais m'y connaissant pas trop eeeen technique, cycle cpu et tout, j'voulais savoir si c'etait valable : ( donc pas perdre trop de temps inutilement

J'ai entendus dire que la commande Drawtext() etait plutot lente à cause des vecteurs. En effet quand j'en mets deux tonnes dans mon prog pour "debugger" rapidement, enfin avoir les variables, le FPS chute bcp.
Donc je penssais à une alternative à LoadFont(), ou plutot une addition qui :
- Chargerait la police demandée pour l'imprimer sur des sprites, du genre :
Comme ça on a differents sprites qu'on pourrait lire au b'soin pour afficher les pixels <> de la coul de fond specifiée pendant l'impression.. Içi blanc pur.Set_Font( fontID(n, Tailledelapolice, Police ) )
LoadFont(n, Police, Tailledelapolice )
CreateSprite( n, x, y, w, h ) : StartDrawing(SpriteOutput(n))
For Chr = 33 to 255 : Drawtext( Chr * Tailledelapolice, 0, Chr(Chr) ) : Next
Stopdrawing()
- Affichées par une procedure qui lirait donc une string lettre par lettre,
Le plot() je ne sais pas si c'est optimisé mais les quelques lignes ASM necessaires à l'impression d'un px permettrais en plus de gerer facilmeent un effet de transparence rapide :p.
Du genre :
(j'ai laissé cursor(n)\X,Y,N[] pour l'instant, c'est tiré de mon code qui gère les curseurs de l'ecran combat)
Peut être même "simuler" un alpha channel selon la coul du pixel pointé, mais là je sais pas si ca resterais plus rapide..Draw_Font( n, character$, Option )
For A = 0 To Cursors(0)\X[n] - 1 : For B = 0 To Cursors(0)\Y[n]
Aa = A ;(Je sais pas comment appeler autrement la var en asm )
Ba = B
Height = Cursors(0)\Y[n]
Ar = A + Focus_X + Mvx + 1
Br = B + Focus_Y + Mvy - 10
; 1 ) Addresse du pixel à appliquer
! MOV eax , dword[v_Aa] ; eax = DrawingWidth
! IMUL eax , dword[v_Height] ; eax * y
! ADD eax , dword[v_Ba] ; eax + x
! MOV dword[v_XY], eax ; XY = eax
; 2 ) Addresse du pixel destinataire en X
! MOV eax , dword[v_Ar] ; eax = A
! SAL eax , 2 ; eax << 2
! ADD eax , dword[v_DrawingBuffer] ; eax + DrawingBuffer
! MOV edi , eax ; X4 = eax
; 3 ) Addresse du pixel destinataire en Y
! MOV ecx , dword[v_Br] ; ecx = y
! IMUL ecx , dword[v_DrawingBufferPitch] ; ecx * DrawingBufferPitch
! ADD ecx , edi ; ecx + X4
If Cursors( XY )\N[n] <> 255 And option = 0
; 4 ) Transforme le pixel ciblé
! MOV dword[ecx], $0F0101
Else
! SAL dword[ecx], 1
EndIf
Next B : Next A
Vui, par ce que là par exemple je fais juste un decalage de bits qui demande surement peu de temps au processeur, mais ça a plus effet d'illuminer la zone que de faire un effet de transparence, et surtout c'est pas trés heureux quand la valeur monte au dessus de (255,255,255)..
J'ai gardé quelque part un code où un essais foireux m'affichait mon sprite en nuance de cyan, rouge ou jaune.. Faudrait que "j'etudie" ça de pres.
Donc bref, pour la transparence, il faudrait que je me mette à prendre la val du pix à appliquer, la modifier selon une valeur passée en argument, verifier qu'elle se situe bien entre 0 et .. RGB(255,255,255).. Ca serait ptet lent au final ?
En tout cas avec la police enregistrée dans un array, enfin un pointeur au mieux, sans effet de trans ça peut ptet mieux le faire que drawtext() ?
J'me tâââte. De toute façon faut que j'fasse des essais pour les effets d'incantations des sorts de mon truc

Si vous avez une idée ou un conseil là dessus qui m'eviterais d'eventuelles fausses pistes ce s'rait vraiment couuul :p.
Si ça marche j'm'amuserais bien à ajouter differentes "options de fusion" comme dit sieur toshop.
Heuuu.. elle existe pas deja cette lib ? xD