Nu pot bate), dezvoltarea și generarea de bani în jocuri flash

Alo as3 recent a început să studieze. Sarcina este următoarea: pentru scopuri de optimizare, vreau să taie un nivel mare vectorial în celule și să afișez doar lucrurile care pot fi văzute în ecranul de joc folosind pătrate raster. La nivelul încă nu a ajuns, dar au existat probleme în proiectul de testare.






import flash.display.Sprite;
importul flash.events.Event;
importul flash.events.MouseEvent;
import flash.geom.Matrix;
import flash.geom.Rectangle;
import flash.display.MovieClip;

import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.text.TextField;
import flash.display.Shape;
/ **
*.
* @ autorul Dukobpa3
* /
clasa publică principală extinde Sprite

private var Greed: Array = Array nou (# 91; # 93;); // array Rechtangle celulele pe care le folosesc apoi în bitmapDate
privat var cellH: int = 50; // înălțimea corespunzătoare a celulei
private var cellW: int = 50; // lățimea celulei

funcția publică principală (): void if (stage) init ();
altfel addEventListener (Event.ADDED_TO_STAGE, init);
>

funcția privată init (e: Event = null): void removeEventListener (Event.ADDED_TO_STAGE, init);

testarea (); // executați procedura
>


testul funcției private (): void

/ * este doar un clip video, de exemplu, am umplut cu tot felul de gunoi, așa că nu-l trag cu mâinile mele. rezultatul este o rețea cu laturi de 50:50 și în fiecare celulă sunt înscrise coordonatele colțului din stânga sus * /
var testClip: MovieClip = nouClipClip ();
pentru (var ax: int = 0; ax <640 ; ax += cellW ) for (var ay:int = 0 ; ay <480 ; ay += cellH ) var tf:TextField = new TextField();
tf.text = ax + ":" + ay; // acesta este textul din celulă
caseta var: Formă = nouă Formă ();
box.graphics.lineStyle (1,0xFF0000);
box.graphics.drawRect (0, 0, cellW, cellH); // acesta este un cadru
testClip.addChild (cutie);
testClip.addChild (tf);
box.x = ax;
box.y = ay;
tf.x = ax;
tf.y = ay;
>
>

var numx: int = (640% celula W. (640 / celulăW + 1) .640 / cellW); // numărul de celule în lățime
var numy: int = (480% celula H. (480 / celH + 1) 480 / celH); // numărul de celule în înălțime

pentru (ax = 0; ax pentru (ay = 0; ay Lana # 91; ax # 93; # 91; ay # 93; = celulă; // aici formăm o matrice de rectanguri, cu începutul de la începutul celulei și lățimea / înălțimea celulei
>
>
urme (lăcomie); // Ei bine, văd că am reușit

Și aici sunt prostiile complete. nifiga nu trage ceea ce fac gresit.
var matr: Matrice = Matrice nouă ();

pentru (ax = 0; ax




var bmpD: BitmapData = BitmapData nou (cellW, cellH, true, 0x00000000);
var bmp: bitmap = Bitmap nou (bmpD);
// creat bitmapdatu 50x50 a inserat-o în bitmap

bmp.x = Greed # 91; ax # 93; # 91; ay # 93; .x;
bmp.y = Greed # 91; ax # 93; # 91; ay # 93; .y;
// setarea coordonatelor de afișare a bitmapului este aceeași cu cea a dreptunghiului desenat

bmpD.draw (testClip, null, null, null, Greed # 91; ax # 93; # 91; ay # 93 ;, true);
// bine, am redat efectiv în bitmapdate acea parte a filmului pe care mi-l dictez celula

Pe scurt, esența acestui proiect este să obțineți un clip video mare, să-l tăiați în părți și să-l afișați în forma sa originală, dar să-l desenați în BitmapData.Draw () de către celule. dar se pare crap. în această metodă există și matricea parametrilor, care este responsabilă pentru distorsiunile părții desenate, dar dacă înțeleg corect esența ei, atunci nu am nevoie de ea. Deoarece nu trebuie să distorsionez nimic și nu există unde să se schimbe, atât dimensiunea sursei, cât și dimensiunea bitmapdatelor și mărimea potrivirii bitmap.

Exemplul meu curent afișează numai o singură celulă, "0: 0", deși teoretic trebuie să tipărească tot ce trebuie :)

Pe scurt, eu sunt un pic confuz și deja nifiga nu înțeleg acest lucru :) Mi-e foame pentru ajutor san-seyev.

ZY în cod a existat încă o mulțime de încercări și erori cu alte urme, poudaljal în numele economiei unui loc, bine și a furnizat explicatorii. Dacă cineva este interesat de fișierul sursă, apoi de piei.

Prima dată când mă întâlnesc, el:

testul funcției private (): void

/ * este doar un clip video, de exemplu, am umplut cu tot felul de gunoi, așa că nu-l trag cu mâinile mele. rezultatul este o rețea cu laturi de 50:50 și în fiecare celulă sunt înscrise coordonatele colțului din stânga sus * /
var testClip: MovieClip = nouClipClip ();
pentru (var ax: int = 0; ax <640 ; ax += cellW ) for (var ay:int = 0 ; ay <480 ; ay += cellH ) var tf:TextField = new TextField();
tf.text = ax + ":" + ay; // acesta este textul din celulă
caseta var: Formă = nouă Formă ();
box.graphics.lineStyle (1,0xFF0000);
box.graphics.drawRect (0, 0, cellW, cellH); // acesta este un cadru
testClip.addChild (cutie);
testClip.addChild (tf);
box.x = ax;
box.y = ay;
tf.x = ax;
tf.y = ay;
>
>

var numx: int = (640% celula W. (640 / celulăW + 1) .640 / cellW); // numărul de celule în lățime
var numy: int = (480% celula H. (480 / celH + 1) 480 / celH); // numărul de celule în înălțime


Și aici sunt prostiile complete. nifiga nu trage ceea ce fac gresit.
var matr: Matrice = Matrice nouă ();
var rect: dreptunghi = dreptunghi nou (0, 0, 50, 50);

pentru (ax = 0; ax var bmpD: BitmapData = BitmapData nou (cellW, cellH, true, 0x00000000);
var bmp: bitmap = Bitmap nou (bmpD);
// creat bitmapdatu 50x50 a inserat-o în bitmap

bmp.x = ax * cellW;
bmp.y = ay * cellH;
// setarea coordonatelor de afișare a bitmapului este aceeași cu cea a dreptunghiului desenat
matr.tx = -bmp.x;
matr.ty = -bmp.y;
bmpD.draw (testClip, matr, null, null, rect, adevărat);
// bine, am redat efectiv în bitmapdate acea parte a filmului pe care mi-l dictez celula

Lucrări, mulțumesc :)
// **********
Doar ceva din nou nu am înțeles nimic.

În tot ajutorul se indică faptul că: Rechtangle - este responsabil pentru acea zonă a obiectului INITIAL pe care îl copiem (în cazul nostru este testClip). Și în exemplul dvs., vom lua întotdeauna zona în poziția 0.0 și cu dimensiunile 50x50.

și ce face matrul tău în exemplul tău? Este logic să credem că ceva de genul tragerea tuturor sursă testClip în raport cu rect noastre. (bine, tipul rect este în loc și testClip este tras de matrice în conformitate cu algoritmul specificat).

În general, în manuale, înțeleg că mai întâi luăm o zonă pe sursă (acest lucru este legat de încercările de a zabulbenit o gamă bidimensională de zone rectangulare). Apoi, după voință, transformăm această zonă (deja copiată și rasterizată, ceva asemănător unui efect post-efect) în conformitate cu regulile matricei.

// *************
Ajutați-vă să înțelegeți. Ce este un dreptunghi și ce este matricea;







Trimiteți-le prietenilor: