Nem lehet verni), a flash játékok fejlesztése és bevételszerzése

Helló Az as3 nemrég tanulmányozta. A feladat a következő: optimalizálási célokra vektoros nagyméretű szintet szeretnék vágni a cellákba, és csak azokat a dolgokat kell megjeleníteni, amelyek a játék képernyőjén raszteres négyzetek segítségével láthatók. A szint még nem érte el, de voltak problémák a vizsgálati projekt.

import flash.display.Sprite;
import flash.events.Event;
import 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;
/ **
*.
* @author Dukobpa3
* /
a nyilvános osztály Fő kiterjeszti a Sprite-et

privát var Greed: Array = új Array (# 91; # 93;); // array Rechtangle sejtjeit, amelyeket a bitmapDate-ben használok
private var cellH: int = 50; // a sejt megfelelő magassága
private var cellW: int = 50; // cellaszélesség

nyilvános funkció Main (): void if (stage) init ();
egyéb addEventListener (Event.ADDED_TO_STAGE, init);
>

init privát funkció (e: Event = null): érvénytelen removeEventListener (Event.ADDED_TO_STAGE, init);

tesztelés (); // futtassa az eljárást
>


magánfunkciós tesztelés (): void

/ * ez csak egy filmcsip, például, feltöltem mindenféle szemetet, hogy ne vonjam le a kezem. az eredmény egy 50:50 oldalas rács, és minden egyes cellában a bal felső sarok koordinátáit írjuk * /
var testClip: MovieClip = új MovieClip ();
a (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; // ez a szöveg a cellában
var box: Shape = új alak ();
box.graphics.lineStyle (1,0xFF0000);
box.graphics.drawRect (0, 0, cellW, cellH); // ez egy keret
testClip.addChild (doboz);
testClip.addChild (tf);
box.x = ax;
box.y = ay;
tf.x = ax;
tf.y = ay;
>
>

var numx: int = (640% sejtW (640 / cellW + 1) .640 / cellW); // cellák száma szélességben
var numy: int = (480% sejtH (480 / cellH + 1) 480 / cellH); // magasságban lévő sejtek száma

a (ax = 0, ax az (ay = 0; ay A kapzsiság # 91; ax # 93; # 91; ay # 93; = sejt; // itt egy sor rektangles-ot alkotunk, a kezdetektől kezdve a cella elején, és a cell szélessége / magassága
>
>
nyomelem (kapzsiság); // Nos, látom, hogy megkaptam

// És itt van a teljes szar. nifiga nem lőni, amit rosszul csinálok.
var matr: Matrix = új mátrix ();

a (ax = 0, ax var bmpD: BitmapData = új BitmapData (cellW, cellH, true, 0x00000000);
var bmp: Bitmap = új bitmap (bmpD);
A létrehozott bitmapdatu 50x50 a bittérképbe tolta

bmp.x = Greed # 91; ax # 93; # 91; ay # 93; .x;
bmp.y = Greed # 91; ax # 93; # 91; ay # 93; .y;
// set bitmap megjelenítési koordináták megegyeznek a rajzolt téglalappal

bmpD.draw (testClip, null, null, null, kapzsiság # 91; ax # 93; # 91; ay # 93;, igaz);
/ / Nos, valójában a bitmapdátumban adtam a filmcímnek azt a részét, amit a cellám diktál nekem

Röviden, ennek a projektnek a lényege, hogy egy nagy videoklipet készítsen, majd részekre vágja és megjelenítse eredeti formájában, hanem a cellák BitmapData.Draw () segítségével rajzolja. de kiderült szar. ebben a módszerben van egy olyan paramétermátrix is, amely felelős a rajzolt rész torzulásáért, de ha helyesen megértem annak lényegét, akkor nincs szükségem rá. Mivel nem kell semmit torzítanom, és nincs hova eltolódni, mivel mind a forrás mérete, mind a bitképadatok mérete és a bitmap mérete egyezik.

Az aktuális példám csak egy cellát jelenít meg, "0: 0", bár elméletileg mindent ki kell nyomtatnia.

Röviden, egy kicsit zavaros vagyok, és a nifiga már nem értette ezt :) Meg vagyok éhezve a szejev-i segítségért.

ZY a kódban még mindig sok a próba és a hiba más nyomokkal, poudaljal a gazdaság nevében a hely, nos, és mellékelte a magyarázó. Ha valaki érdekli a forrásfájl, akkor a bőr.

Amikor először találkozom, ő:

magánfunkciós tesztelés (): void

/ * ez csak egy filmcsip, például, feltöltem mindenféle szemetet, hogy ne vonjam le a kezem. az eredmény egy 50:50 oldalas rács, és minden egyes cellában a bal felső sarok koordinátáit írjuk * /
var testClip: MovieClip = új MovieClip ();
a (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; // ez a szöveg a cellában
var box: Shape = új alak ();
box.graphics.lineStyle (1,0xFF0000);
box.graphics.drawRect (0, 0, cellW, cellH); // ez egy keret
testClip.addChild (doboz);
testClip.addChild (tf);
box.x = ax;
box.y = ay;
tf.x = ax;
tf.y = ay;
>
>

var numx: int = (640% sejtW (640 / cellW + 1) .640 / cellW); // cellák száma szélességben
var numy: int = (480% sejtH (480 / cellH + 1) 480 / cellH); // magasságban lévő sejtek száma


// És itt van a teljes szar. nifiga nem lőni, amit rosszul csinálok.
var matr: Matrix = új mátrix ();
var rect: Rectangle = új téglalap (0, 0, 50, 50);

a (ax = 0, ax var bmpD: BitmapData = új BitmapData (cellW, cellH, true, 0x00000000);
var bmp: Bitmap = új bitmap (bmpD);
A létrehozott bitmapdatu 50x50 a bittérképbe tolta

bmp.x = ax * cellW;
bmp.y = ay * sejtH;
// set bitmap megjelenítési koordináták megegyeznek a rajzolt téglalappal
matr.tx = -bmp.x;
matr.ty = -bmp.y;
bmpD.draw (testClip, matr, null, null, rect, true);
/ / Nos, valójában a bitmapdátumban adtam a filmcímnek azt a részét, amit a cellám diktál nekem

Működik, köszönöm :)
// **********
Csak valamit, amit még nem értettem semmit.

Minden segítséget illetően azt jelzik, hogy: Rechtangle - felelős az általunk másolandó INITIAL objektum területéhez (ebben az esetben ez a testClip). És az Ön példáján mindig a 0.0-es pozíciót és a 50x50-es méretet veszik.

és mit csinál a matr a példában? Logikus, hogy úgy gondoljuk, hogy valami olyasmit, mint amikor a forrás testClip-t húzzuk a recthez képest. (Nos, a rect típus a helyén van, a testClip pedig a megadott algoritmus szerint húzódik a mátrixon).

Általánosságban a kézikönyvekben megértem, hogy először egy bizonyos területet veszünk a forráson (ez kapcsolódik a zabulbenit kétdimenziós téglalap alakú területek kísérletéhez). És akkor, tetszés szerint, átalakítjuk ezt a területet (már másoltuk és raszterizáltuk, valami utóhatást), a mátrix szabályai szerint.

// *************
Segít megérteni. Mi a téglalap és mi a mátrix?