Escolar Documentos
Profissional Documentos
Cultura Documentos
1.
UVOD ................................................................................................................................. 3
2.
3.
4.
5.
6.
Spisak slika
Sl. 3-1 Startni prozor Flash-a...................................................................................................... 8
Sl. 3-2 Unoenje imena klase u Properties panelu ..................................................................... 8
Sl. 3-3 Poetna stranica razvojnog okruenja FlashDevelop ................................................... 10
Sl. 3-4 Klasa Test u razvojnom FlashDevelop okruenju ........................................................ 11
Sl. 4-1 frame-by-frame animacija ............................................................................................. 12
Sl. 4-2 renderovanje i prikazivanje ........................................................................................... 12
Sl. 4-3 skript animacija ............................................................................................................. 12
Sl. 4-4 zato ne koristimo for ciklus za animaciju objekta ....................................................... 13
Sl. 4-5 pomeranje crvene lopte sa leva na desno preko ekrana ................................................ 15
Sl. 4-6 Dve razliite putanje loptice ......................................................................................... 16
Sl. 4-7 Pulsiranje loptice........................................................................................................... 16
Sl. 4-8 Putanja koja zavisi od parametara range, xspeed i yspeed ........................................... 17
Sl. 4-9 Sinusna putanja ............................................................................................................. 17
Sl. 4-10 Iscrtavanje krive .......................................................................................................... 18
Sl. 5-1 Prebacivanje kruga iz jednog kvadrata u drugi ............................................................. 20
Sl. 5-2 Sukcesivno prebacivanje kruga..................................................................................... 20
Sl. 5-3 Klasa ParentKvadrat ..................................................................................................... 21
Sl. 5-4 Drugi nain definisanja klase ParentKvadrat ................................................................ 22
Sl. 5-5 Klasa Krug .................................................................................................................... 22
Sl. 5-6 Izmenjena klasa PreomenaRoditelja2 ........................................................................... 23
Sl. 5-7 Dogaaji mia ............................................................................................................... 24
Sl. 5-8 Dogaaji tastature ......................................................................................................... 25
Sl. 6-1 Lista metoda za drawing API........................................................................................ 28
Sl. 6-2 Crtanje miom po panelu .............................................................................................. 28
Sl. 6-3 Crtanje krivih ................................................................................................................ 29
Sl. 6-4 Otri prelazi izmeu krivih ........................................................................................... 30
Sl. 6-5 Izgled krivih dobijenih kodom sa Sl. 6-5. ..................................................................... 30
Sl. 6-6 Uvoenje sredinjih taaka ........................................................................................... 31
Sl. 6-7 Blagi prelazi izmeu krivih ........................................................................................... 31
Sl. 6-8 Potpuno glatka kriva .................................................................................................. 32
Sl. 6-9 Zatvorena kriva ............................................................................................................. 32
Sl. 6-10 Zatvorena glatka kriva ................................................................................................ 33
Sl. 6-11 Strelica ........................................................................................................................ 34
Sl. 6-12 Okretanje strelice prema miu .................................................................................... 34
Sl. 6-13 Rastojanja od centra do mia ...................................................................................... 35
1. UVOD
U svetu Fle-a postoji jaz izmeu onih koji koriste i razumeju ActionScript i onih
drugih. Nekad se to pogreno naziva razlika izmeu dizajnera i projektanata
podrazumevajui da dizajneri ne razumeju kod, a da projektanti ne razumeju dizajn. Ovo je
naravno potpuno pogreno pojednostavljenje. ActionScript moete da primenjujete kao
dizajner ubacujui gotove pakete u animaciju ili kao programer iji je glavni cilj da
isprogramira postavljene zahteve dizajna. ActionScript je mnogo vie od toga. ActionScript je
umetnost.
Da li je programiranje umetnika forma? Isto koliko je fotografija ili film bilo
umetnika forma u nedavnoj prolosti. Kada je fotografija prvi put napravljena, smatrana je
izvanrednim tehnikim dostignuem i nita vie. Ona je predstavljala tehniki postupak
beleenja stvarnosti. 150 godina kasnije, mi smo danas u stanju da fotografiju protumaimo
kao subjektivni umetniki izraz. Pre oko sto godina braa Lumier su prikazali film o ulasku
voza u stanicu Lion i proizveli reakciju da su svi prisutni u panici pobegli iz sale u kojoj se
prikazivao film u strahu od dolazeeg voza. Danas zanamo da itamo film, mi smo filmski
obrazovani. Ovo ne moemo jo uvek da kaemo za programiranje.
Danas na programiranje gledamo kao na isto tehniku stvar. Programer danas, je ono
to je filmski stvaralac bio pre jednog veka: umetnik koji stvara u mraku, ekajui da se
drutvo obrazuje toliko da bi bilo u stanju da njegov rad tretira kao umetnost. Sigurno neemo
ekati vek da se ovo dogodi.
Cilj ovog kursa je da studentima da osnovu koja e im omoguiti kreativni pristup
ActionScriptu. Ovo nije kurs vizuelnog programiranja kojim se kliktanjem i prevlaenjem
kontrole vuku na radnu povrinu, a programsko okruenje kreira programski kod umesto vas.
Vizuelni nain pravljenja programskih paketa je izuzetno dobar, jer programera oslobaa
pisanja ogromne koliine ablonskog koda i omoguava programeru da se usresredi na sutinu
problematike koju programira. ActionScript 3.0 (u daljem tekstu e se koristiti skraenica
AS3), koji je predmet ovog kursa je objektno orjentisan skript jezik, veoma blizak C++ i za
njega nema i ne postoji potreba za vizuelnom verzijom. U ovom jeziku kreirate klase i
direktno ih izvravate na Flash Player-u. Ove klase piete u proizvoljnom tekst editoru i
najee nemate potrebu za nekim dodatnim okruenjem koje bi vam pomoglo u tome.
Pisanje ovih klasa je jedan ali ne i jedini zadatak ovog kursa. AS3 je izvanredan a
jednostavan nain da oivite va kod i da kreativno spojite dizajnera i programera u vama.
Da bi to bilo mogue, potrebno je da poznajete sutinu animacije i da steknete osnovna
neophodna znanja iz:
osnovnih koncepata animacije,
tehnika renderovanja,
osnovnih i naprednih pokreta i
3D animacije
Cilj ovog kursa je da vam prenese ova znanja i omogui da razumete ta se zaista
deava kada izvravate vau klasu na Flash Player-u, a time i da otvori ogromnu i veoma lepu
oblast kreativne dinamike animacije.
ak i veoma sloen skup pravila koji definiu kako e se objekti menjati zauzima manje
prostora od slike srednje veliine.
Prirodno, postoji i kontra argument. Sa poveanjem naih umetnikih zahteva, pravila
postaju sve komplikovanija, a raunar mora da radi sve napornije i napornije da bi izraunao
opis za sledeu scenu. CPU ima na raspolaganju tano odreeno vreme izmeu dva frejma da
sve ovo izrauna, i ako se to vreme produi, prikaz naeg filma zapada u tekoe. Ovaj
problem ne postoji sa serijom slika jer, slika je slika, bez obzira ta je na njoj.
Kada pravimo klasu koja nasleuje MovieClip ili Sprite, ona automatski nasleuje sva
svojstva i metode tih klasa. Tada dodajemo specifina ponaanja i svojstva koja se primenjuju
na objekt koji pravimo. Na primer, za igricu koju pravimo elimo da napravimo objekat
svemirski brod. elimo da za ovaj objekat, pored odreene grafike, imamo njegovu poziciju
na ekranu, da ga pomeramo, rotiramo, oslukujemo dogaaje mia i tastature za interakciju sa
korisnikom. Ovo su sve stvari koje MovieClip i Sprite mogu da odrade. Tada dodajemo
specifina svojstva kao to su brzina, gorivo, oteenje, i specifina ponaanja, kao to su
uzletanje, sudar, pucanje, samounitenje. Klasa bi mogla da izgleda ovako:
package {
import flash.display.Sprite;
public class SvemirskiBrod extends Sprite {
private var brzina:Number = 0;
private var ostecenje:Number = 0;
private var gorivo:Number = 1000;
public function Uzletanje():void {
// . . .
}
public function Sudar():void {
// . . .
}
public function Pucanje():void {
// . . .
}
public function SamoUnitenje():void {
// . . .
}
}
}
Sve ostalo u ovom kodu je ve poznato od modifikatora pristupa public, konstruktora u kome
se poziva metoda init() kojom se crta crveni krug.
U ovoj glavi e biti objanjeno kako da se u svakom od pobrojana etiri okruenja
postavi AS3 projekat sa ovom osnovnom klasom. U nastavku kursa e se prezentovati samo
kod odgovarajuih klasa, podrazumevajui da on moe da se primeni u bilo kojem od tih
okruenja. Klasu koju smo napisali koristei proizvoljan tekst editor emo sauvati sa
nastavkom as, Test.as.
Sada jednostavno testiramo kod odabirom Test Movie iz Control menija ili Debug
Movie iz Debug menija ili koristimo preice Ctrl+Enter ili Ctrl+Shift+Enter. Fle e
kompilirati klasu u Test.SWF. Kada se pokrene SWF, konstruktor i init() metoda crtaju na
crveni krug.
Kada se koristi dokument klasa, treba izbegavati stavljanje bilo kakvog koda na
vremensku liniju, ak ni komentare, jer to moe da prouzrokuje konflikt sa kodom koji dodaje
kompajler.
U ovom izrazu %1 oznaava parametar batch fajla, tj. u naem sluaju, ime fajla koji
kompajliramo, tj. Test.as.
Kada koristimo CS IDE, u properties panelu podeavamo svojstva dokumenta, kao to
su veliina SWF-a, frame rate, boja pozadine itd. Ako koristimo command-line kompajler ovo
moemo da uradimo na vie naina. Prvi je da na komandnu liniju dodamo te parametre:
-default-background-color=color
-default-frame-rate=fps
-default-size=width,height
Jednostavno, ove parametre dodajemo na komandnu liniju posle imena klase:
(putanja)mxmlc.exe Test.as -default-background-color=0xff0000
Moemo da dodamo proizvoljan broj parametara koje meusobno razdvajamo
prazninom. Drugi nain je da ova svojstva dokumenta postavimo u metapodatke direktno u
nau klasu. Metapodaci se sastoje od naredbi koje nisu ActionScript naredbe koje se
kompiliraju ve ih kompajler koristi tokom procesa kompiliranja. Ovo se izvodi naredbom
SWF:
[SWF(backgroundColor="0xffffff", width="800", height="600", frameRate="31")]
Ova linija se u kod postavlja neposredno pre deklaracije klase.
Iako su mogunosti ovog okruenja impozantne, za potrebe ovog kursa emo koristiti
samo njegov editor da bi pisali klase i dibager za putanje i proveravanje koda.
11
prikaz
frejma1
prikaz
frejma2
prikaz
frejma3
prikaz
frejma..
render
frejma1
prikaz
frejma1
render
frejma2
prikaz
frejma2
definii
poetno
stanje
render
frejma
prikaz
frejma
primena
pravila
render
frejma
primena
pravila
kraj
ciklusa
da
prikaz
frejma
ne
13
Ono to esto zbunjuje je da koristimo dogaaj EnterFrame iako najee na film ima
samo jedan frejm. Ustvari, EnterFrame moemo da posmatramo kao tajmer. Na osnovu frame
rate, Fle izraunava koliko vremena traje svaki frejm i u tom intervalu ispaljuje ove
dogaaje. Ukoliko postoji sledei frejm, prelazi na njega, a ako nema, vraa se na prvi. Sada
moemo da napiemo kod PrvaAnimacija za loptu koja se pomera na desno preko ekrana
(Sl. 4.5):
package {
import flash.display.Sprite;
import flash.events.Event;
public class PrvaAnimacija extends Sprite {
private var ball:Sprite;
public function PrvaAnimacija() {
init();
}
private function init():void {
ball = new Sprite();
addChild(ball);
ball.graphics.beginFill(0xff0000);
ball.graphics.drawCircle(0, 0, 40);
ball.x = 20;
ball.y = stage.stageHeight / 2;
ball.addEventListener(Event.ENTER_FRAME, onEnterFrame);
}
private function onEnterFrame(event:Event):void {
ball.x ++;
}
}
}
4.2 Vebanja
Jednostavni kod sa slike 4.5. ima sve neophodne elemente za jednostavnu statiku
animaciju. Sada moemo raznovrsnim jednostavnim promenama u funkciji onEnterFrame da
menjamo putanju loptice ili da iscrtavamo neku krivu. Neke od takvih modifikacija su
prikazane u sledeih pet document klasa.
package {
import flash.display.Sprite;
import flash.events.Event;
public class DvePutanje extends Sprite {
private var ball:Sprite;
private var boja:uint = 0xff0000;
private var ugao:Number = 0;
public function DvePutanje() {
init();
}
private function init():void {
ball = new Sprite();
addChild(ball);
ball.graphics.beginFill(boja);
ball.graphics.drawCircle(0, 0, 40);
ball.x = 20;
15
ball.y = stage.stageHeight / 2;
ball.addEventListener(Event.ENTER_FRAME, onEnterFrame);
}
private function onEnterFrame(event:Event):void {
if (ball.x > stage.stageWidth / 2)
{
ball.y = stage.stageHeight / 2 + Math.sin(ugao) * 50;
ugao += .1;
} else
{
ball.x ++;
}
}
}
}
16
package {
import flash.display.Sprite;
import flash.events.Event;
public class SinusnaPutanja extends Sprite {
private var ball:Sprite;
private var angle:Number = 0;
private var centerY:Number = 200;
private var range:Number = 50;
private var xspeed:Number = 1;
private var yspeed:Number = .05;
public function SinusnaPutanja ()
{
init();
}
private function init():void {
ball = new Sprite();
addChild(ball);
ball.graphics.beginFill(0xff0000);
ball.graphics.drawCircle(0, 0, 40);
ball.x = 0;
addEventListener(Event.ENTER_FRAME, onEnterFrame);
}
public function onEnterFrame(event:Event):void {
ball.x += xspeed;
ball.y = centerY + Math.sin(angle) * range;
angle += yspeed;
}
}
}
17
package {
import flash.display.Sprite;
import flash.events.Event;
public class Crtanje extends Sprite {
private var angle:Number = 0;
private var centerY:Number = 200;
private var range:Number = 50;
private var xspeed:Number = 1;
private var yspeed:Number = .05;
private var xpos:Number;
private var ypos:Number;
public function Crtanje()
{
init();
}
private function init():void {
xpos = 0;
graphics.lineStyle(1, 0, 1);
graphics.moveTo(0, centerY);
addEventListener(Event.ENTER_FRAME, onEnterFrame);
}
public function onEnterFrame(event:Event):void {
xpos += xspeed;
angle += yspeed;
ypos = centerY + Math.sin(angle) * range;
graphics.lineTo(xpos, ypos);
}
}
}
5. DISPLAY LISTA
Svaki objekat koji se pojavljuje na sceni je kreiran od klase koja nasleuje klasu
DisplayObject. Drugim reima, svi objekti (movie clips, dugmad buttons, tekstualna polja
text fields, grafika graphics, bitmaps, komponente, osnovni oblici basic shapes) su deo
velike familije koji se ponaaju na isti osnovni nain u smislu njihovog kreiranja, postavljanja
na scenu, unitavanja i manipulisanja na sceni. Zbog ovoga je kod za kreiranje razliitih
tipova objekata meusobno veoma slian:
var mojTextfield:TextField = new TextField();
var mojMovieClip:MovieClip = new MovieClip();
var mojSprite:Sprite = new Sprite();
Kao to smo videli u prethodnim primerima, sada moemo da crtamo neki sadraj u
kreirani objekt, kao npr:
mojSprite.graphics.beginFill(0xff0000);
mojSprite.graphics.drawCircle(0, 0, 40);
mojSprite.graphics.endFill();
Meutim, ako pokuamo da prikaemo ovo, teko da emo bilo ta videti. Na ovom
mestu nastupa naa diskusija o Display listi.
18
Display listu moemo da zamislimo kao stablo svih vizuelnih objekata u vaem filmu.
U korenu stabla je scena, koja je uvek vidljiva. Na sceni moete da imate nekoliko movie
clip-ova ili nekih drugih vizuelnih objekata. Kada ih unesete na scenu oni postaju takoe
vidljivi. U okviru tih objekata moete da imate druge vizuelne objekte, a u njima druge, itd i
to u osnovi predstavlja vau display listu. U AS3, kada kreirate vizuelni objekat on nije
automatski ubaen na display listu. Ako pojam scena uzmemo bukvalno, vizuelne objekte
moemo da zamislimo kao glumce koji stoje iza zavese i publika ih ne vidi sve dok ne nastupi
trenutak kada njihova uloga to od njih zahteva. Takoe, display listu moemo da zamislimo
kao familiju, tj. seriju relacija roditelj-dete. Kada dodajete novi objekat na display listu,
objekat kome ste dodali novi objekat je roditelj, a novi objekat je roditeljevo dete. Zbog
ovoga, kada dodajete objekat na listu, to radite pomou addChild metode.
Document klasa predstavlja koren stabla koji je automatski vidljiv, i kome po potrebi
dodajete naslednike i naslednike tim naslednicima:
addChild(mojSprite);
Sada posedujemo dovoljno znanja da iskoristimo nasleivanje da bi objekat premestili
sa jednog roditelja na drugi.
package {
import flash.display.Sprite;
import flash.events.Event;
public class PromenaRoditelja extends Sprite {
private var parent1:Sprite;
private var parent2:Sprite;
private var ball:Sprite;
public function PromenaRoditelja() {
init();
}
private function init():void {
parent1 = new Sprite();
addChild(parent1);
parent1.graphics.lineStyle(1, 0);
parent1.graphics.drawRect(-50, -50, 100, 100);
parent1.x = 60;
parent1.y = 60;
parent2 = new Sprite();
addChild(parent2);
parent2.graphics.lineStyle(1, 0);
parent2.graphics.drawRect(-50, -50, 100, 100);
parent2.x = 170;
parent2.y = 60;
ball = new Sprite();
parent1.addChild(ball);
ball.graphics.beginFill(0xff0000);
ball.graphics.drawCircle(0, 0, 40);
ball.addEventListener(MouseEvent.CLICK, onBallClick);
}
19
Imamo potpunu slobodu da biramo ta e u definiciji klase biti uvek isto, a ta e se preko
parametara menjati prilikom definisanja instance te klase u naoj document klasi. Na primer,
gornji kvadrat moemo da definiemo i kao:
package {
import flash.display.Sprite;
public class ParentKvadrat extends Sprite {
private var xPos:Number;
private var yPos:Number;
public function ParentKvadrat(X:Number=50, Y:Number=50)
{
21
this.xPos = X;
this.yPos = Y;
init();
}
private function init():void
{
graphics.lineStyle(1, 0);
graphics.drawRect( -50, -50, 100, 100);
this.x = xPos;
this.y = yPos;
}
}
}
22
}
public function onBallClick(event:MouseEvent):void
{
parent2.addChild(ball);
}
public function onBallDClick(event:MouseEvent):void
{
parent1.addChild(ball);
}
}
}
CLICK
DOUBLE_CLICK
MOUSE_DOWN
MOUSE_MOVE
MOUSE_OUT
MOUSE_OVER
MOUSE_UP
MOUSE_WHEEL
ROLL_OUT
ROLL_OVER
Dogaaji jasno opisuju sami sebe, tako da dodatna objanjenja nisu potrebna. Da bi se ipak
stekao oseaj o njima, pustite sledei kod i dobiete imena dogaaja ispisana u tekstualnom
polju u zavisnosti od trenutnog poloaja mia.
package {
import flash.display.Sprite;
import flash.events.MouseEvent;
import flash.text.TextField;
public class MouseEvents extends Sprite {
private var textField:TextField;
public function MouseEvents() {
23
init();
}
private function init():void
{
var sprite:Sprite = new Sprite();
addChild(sprite);
sprite.graphics.beginFill(0xff0000);
sprite.graphics.drawCircle(0, 0, 50);
sprite.x = stage.stageWidth / 2;
sprite.y = stage.stageHeight / 2;
sprite.addEventListener(MouseEvent.CLICK, onMouseEvent);
sprite.addEventListener(MouseEvent.DOUBLE_CLICK, onMouseEvent);
sprite.addEventListener(MouseEvent.MOUSE_DOWN, onMouseEvent);
sprite.addEventListener(MouseEvent.MOUSE_MOVE, onMouseEvent);
sprite.addEventListener(MouseEvent.MOUSE_OUT, onMouseEvent);
sprite.addEventListener(MouseEvent.MOUSE_OVER, onMouseEvent);
sprite.addEventListener(MouseEvent.MOUSE_UP, onMouseEvent);
sprite.addEventListener(MouseEvent.MOUSE_WHEEL, onMouseEvent);
sprite.addEventListener(MouseEvent.ROLL_OUT, onMouseEvent);
sprite.addEventListener(MouseEvent.ROLL_OVER, onMouseEvent);
textField = new TextField();
addChild(textField);
}
public function onMouseEvent(event:MouseEvent):void
{
textField.text = event.type;
}
}
}
24
25
6. TEHNIKE RENDEROVANJA
Ovako rogobatan naslov proizilazi iz neadekvatnih srpskih rei za strane tehnike
izraze. Najpribliniji prevod za render je prikazivanje, ali u svetu proizvodnje filmova
smisao je mnogo iri i obuhvata i irok spektar aktivnosti vezanih za samo prikazivanje. U
ovoj glavi e biti prikazani najvaniji segmenti kreiranja vizuelnog sadraja, i to: boje, API za
crtanje, transformacije boja, filteri i bitmap klasa.
pozitivne i negativne cele brojeve, te je prvi od 32 bita kojima se predstavljaju ovi brojevi
rezervisan za znak. U uint smetamo samo pozitivne cele brojeve, te je jasno da je
maksimalna dozvoljena vrednost za ovaj tip duplo vea od tipa int, konkretno, u int ne moe
da se smeste sve 32-bitne vrednosti boja, a u uint mogu. Naredba za kombinovanje osnovnih
boja sadri operacije kojima se bitovi pomeraju ulevo:
color24 = red << 16 | green << 8 | blue;
color32 = alpha << 24 | red << 16 | green << 8 | blue;
U ovoj formuli operator nad bitovima << n pomera bitove ulevo za n mesta. Pretpostavimo
da je vrednost promenljive red 0xFF, odnosno 255, odnosno binarno 11111111. Pomeranjem
16 mesta ulevo dobijamo:
111111110000000000000000
Neka je dalje vrednost promenljive green 0x55, odnosno 85 decimalno, odnosno 01010101
binarno. Pomeranjem 8 mesta ulevo, dobijamo:
000000000101010100000000
Korienjem logike ili operacije zaista dobijamo traenu sloenu boju:You could simply add
111111110101010111110011
clear()
lineStyle(width, color, alpha)
moveTo(x, y)
lineTo(x, y)
curveTo(x1, y1, x2, y2)
beginFill(color, alpha)
endFill()
beginGradientFill(fillType, colors, alphas, ratios, matrix)
drawCircle(x, y, radius)
drawEllipse(x, y, width, height)
drawRect(x, y, width, height)
drawRoundRect(x, y, width, height, ellipseWidth, ellipseHeight)
Sledeim kodom crtamo krive izmeu taaka, tako da poloaj mia predstavlja
kontrolnu taku.
package {
import flash.display.Sprite;
import flash.events.MouseEvent;
public class DrawingCurves
{
private var x0:Number =
private var y0:Number =
private var x1:Number;
private var y1:Number;
private var x2:Number =
private var y2:Number =
extends Sprite
100;
200;
300;
200;
29
}
graphics.lineStyle(1);
// pomeranje na prvu taku
graphics.moveTo(points[0].x, points[0].y);
// prelaz na naredne parove
for (i = 1; i < numPoints; i += 2)
{
graphics.curveTo(points[i].x, points[i].y,
points[i + 1].x, points[i + 1].y);
}
}
}
}
Kada pustimo film vidimo da su prelazi izmeu segmenata otri, kao oni sa slike 6.5.
30
Sinusni talasi:
public function onEnterFrame(event:Event){
value = center + Math.sin(angle) * range;
angle += speed;
}
Kreiranje krugova:
public function onEnterFrame(event:Event){
xposition = centerX + Math.cos(angle) * radius;
yposition = centerY + Math.sin(angle) * radius;
angle += speed;
}
Kreiranje elipsi:
public function onEnterFrame(event:Event){
xposition = centerX + Math.cos(angle) * radiusX;
yposition = centerY + Math.sin(angle) * radiusY;
angle += speed;
}
33
Kao ilustraciju emo napraviti animaciju u kojoj se uta strelica koja se nalazi na
centru panela okree prema trenutnom poloaju mia. Na slici 6-11 je prikazana klasa koja
predstavlja nau utu strelicu, a na 6-12 kod za okretanje strelice prema miu.
package {
import flash.display.Sprite;
public class Strelica extends Sprite {
public function Strelica() {
init();
}
public function init():void {
graphics.lineStyle(1, 0, 1);
graphics.beginFill(0xffff00);
graphics.moveTo(-50, -25);
graphics.lineTo(0, -25);
graphics.lineTo(0, -50);
graphics.lineTo(50, 0);
graphics.lineTo(0, 50);
graphics.lineTo(0, 25);
graphics.lineTo(-50, 25);
graphics.lineTo(-50, -25);
graphics.endFill();
}
}
}
Sledei kod ispisuje u tekstualno polje trenutna rastojanja mia od centra panela:
package
{
import flash.display.Sprite;
import flash.events.MouseEvent;
import flash.text.TextField;
public class MouseDistance extends Sprite {
private var sprite1:Sprite;
private var textField:TextField;
public function MouseDistance()
{
init();
}
private function init():void {
sprite1 = new Sprite();
addChild(sprite1);
sprite1.graphics.beginFill(0x000000);
sprite1.graphics.drawRect(-2, -2, 4, 4);
sprite1.graphics.endFill();
sprite1.x = stage.stageWidth / 2;
sprite1.y = stage.stageHeight / 2;
textField = new TextField();
addChild(textField);
stage.addEventListener(MouseEvent.MOUSE_MOVE,
onMouseMove);
}
public function onMouseMove(event:MouseEvent):void {
graphics.clear();
graphics.lineStyle(1, 0, 1);
graphics.moveTo(sprite1.x, sprite1.y);
graphics.lineTo(mouseX, mouseY);
var dx:Number = sprite1.x - mouseX;
var dy:Number = sprite1.y - mouseY;
var dist:Number = Math.sqrt(dx * dx + dy * dy);
textField.text = dist.toString();
}
}
}
35