Cum să faci sprite animate

Păstrați toate cadrele într-o singură imagine, apoi citiți cu decalaj. mod Div te va ajuta.

Dar este interesant, toți dezvoltatorii de jocuri strategice animă cardul cu clic-joc cu un cronometru și redescoperă întregul card în n-secunde?

În jocul Kirkop, de exemplu, am copiat întreaga hartă dintr-o dată, dar numai plăcile care se încadrează în zona ecranului (toate acestea pentru ce motiv).
Și puteți redrage numai acele părți ale ecranului pe care există în prezent sprite mobile (acest lucru este posibil numai dacă nu există prea multe pe hartă).
Și în detrimentul aplicării programului Timer, este necesar ca el să o folosească. Mai mult, el are suport la nivel hardware.

Timer - nu, nu cred. La minim, GetTickCount.


> VolanD # xA0; (27.07.04 09:58) [4]

Și cum credeți. Numai partea vizibilă este redesenată. Fizica este completă.
Apropo, în jocurile tridimensionale pot fi, de asemenea, animate în acest fel - cu ajutorul câtorva grile preîncărcate în memorie, și nu o calculare greșită a cât de mult eroul își ridică mâna sau piciorul!

Deci, ce înseamnă modelul este numărul de cadru din imaginea lipită?

Și cum să desenezi o imagine, de exemplu, în al doilea rând?

De asemenea, aveți numărul de cadre pe linie, înălțimea și lățimea cadrului. Amintiți-vă cum sunt stocate datele în memorie și veți primi un răspuns. Avem nevoie de o formulă simplă.
Deși în cazul în care ramele de lățime diferită, atunci trebuie să vă încurcați în jur.

[11] Tocmai am început să lucrez cu DX (înainte de a face primitivul pe pasque), deci dacă nu este dificil să-mi explic cum să o fac.

PH, PW - înălțimea și lățimea fiecărui cadru.

Rând - numărul rândului orizontal (0 - cel mai înalt)
Col - numărul cadrului în rând (0 - cel din stânga)

Rect.Top: = PH * Row;
Rect.Left: = PW * Col;
Rect.Bottom: = Rect.Top + PH;
Rect.Right: = Rect.Left + PW;

// Acum Rect arată spre sprite corect

Cu toate acestea, uneori, pentru a optimiza surfas, puteți face înălțimea fiecărei rânduri unice, pentru a face acest lucru, creați o matrice în care va fi stocată înălțimea și linia de start a fiecărui rând și lățimea cadrului în rând. O matrice în dimensiune după numărul de rânduri.
atunci

introduceți înregistrarea tTable
# xA0; # xA0; # xA0; # xA0; Start: întreg;
# xA0; # xA0; # xA0; # xA0; Wight, Înălțime. byte // Byte, dacă nu planificați mai multe sprite decât 255 * 255

var Table: matrice [0..n] din tTable # xA0; # xA0;

Rect.Top: = Tabel [Row]. Începeți;
Rect.Left: = Tabelul [Row] .Wight * Col;
Rect.Bottom: = Rect.Top + Table [Row] .Height;
Rect.Right: = Rect.Left + Tabelul [Row] .Wight;

Citiți cum este stocată memoria în memorie. Poate că am aflat deja asta, dar o să spun: liniară. Ie rând după rând. Deci, dacă bitmap-ul dvs. are o lungime de 100 de pixeli, atunci cu 101 veți obține 1 pixel în al doilea rând. Etc.

Stop. Ești sub DX, ce vrei să spui DelphiX sau ceva de genul ăsta? Apoi mi-am pierdut puțin, sunt lucruri pe care nu le poți deranja, deși mai trebuie să știi. În DelphiX, nu sunt un asistent.

În DelhiX Sprites în Bitmap sunt stocate în general numai într-un singur rând, deci nimic complicat.

Mulțumesc foarte mult. Deja organizată.
Într-adevăr, nimic complicat. Tocmai am ținut animația personajului meu într-o singură imagine în două rânduri:
în 1 eroul merge spre stânga, în 2 - spre dreapta. Vă mulțumim din nou.

Articole similare