Autor | Zpráva | ||
---|---|---|---|
Jadro007 Profil * |
#1 · Zasláno: 19. 5. 2010, 18:12:01
Ahoj, v AS2 teprve začínám a proto mám začátečnický dotaz ;)
Chtěl bych si na zkoušku vytvořit takovou jednoduchou hru... :) Panáček vystřelí na cíl. Vše funguje jak má, ale mám problém s náboji... Protože potřebuji víc nábojů naráz, vytvořil jsem třídu Náboj, vše funguje jak má, ale nevím, jak vytvořený objekt, třeba var strela = new Naboj(); Tady nastává problém, nevím, jak nově vzniklý objekt nějak "navěsit" na zkopírovaný MC náboje... Chtěl bych to udělat tak, aby když sem měl v třídě Naboj metodu pohyb(), aby šla aplikovat na MC... ;) Nevíte jak na to? :) |
||
VXC008 Profil * |
#2 · Zasláno: 19. 5. 2010, 22:44:51
Rozsir si tridu MovieClip o metody tridy Naboj
MovieClip.prototype.pohyb() { // obsah metody pohyb } a metoda by se mela volat: duplikovany_mc.pohyb(); A nebo uprav metodu pohyb() o parametr target, ktery bude pracovat s danym MovieClipem pohyb(target:MovieClip) { // obsah metody pohyb } V AS2 jsou dva zpusoby jak vytvorit vlastni objekt (tridu) jeden se podoba zpusobu podobnem JS a druhy zase zpusobu, ktery se pouziva v AS3. |
||
Jadro007 Profil * |
#3 · Zasláno: 20. 5. 2010, 15:33:38
Kam mám napsat tohle?
MovieClip.prototype.pohyb() { // obsah metody pohyb } Zkoušel jsem to dát přímo do kódu, ale nefunguje to tak jak by mělo... ;) |
||
VXC008 Profil * |
#4 · Zasláno: 20. 5. 2010, 18:52:19
Promin zpletl jsem si pojmy z dojmy :D.
Tridu rozsiris o metodu, napr. takto: MovieClip.prototype.pohyb = function(value:Number):Void { this._x += value; } circle.pohyb(20); Deklarujes to nekde na zacatku a pak tuto metodu muzes volat v jakemkoli MC. V tomto pripade posunec MC circle o 20 bodu v ose _x. Ja osobne mam radeji tridy v AS3 je to lepsi a prehlednejisi... |
||
VXC008 Profil * |
#5 · Zasláno: 21. 5. 2010, 11:57:35
A jete to jde udelat takto:
Trida Strela.as, ktera je ve slozce com. Slozka com je ve slozce kde je dany soubor *.FLA, tento zpusob pouzivani trid ma byt funkcni od FlashPlayeru 6 AS2 // AS2 class com.Strela { public function Strela() { // .. } public static function pohyb(target:Object):Void { target.i = 0; target.onEnterFrame = function():Void { if (this.i < 50) { target.i++; target._x += 1; } else if (this.i == 50) { delete this.onEnterFrame; trace("end"); } }; } } Tento script dej do _root nekde na zacatek casove osy // importovani tridy import com.Strela; var timeout:Number = setTimeout(startPohyb, 20, circle); var timeout2:Number = setTimeout(startPohyb, 350, circle2); var timeout3:Number = setTimeout(startPohyb, 720, circle3); function startPohyb(target:Object):Void { // zavolani metody pohyb() staticke tridy Strela, ktera pomoci parametru target zacne animovat MC circle, circle1... Strela.pohyb(target); } //Strela.pohyb(circle); Protoze je pouzito metody setTimeout() tento priklad bude funkcni od FlashPlayeru 8 Trida Strela.as, ktera je ve slozce com. Slozka com je ve slozce kde je dany soubor *.FLA, funguje od FlashPlayeru 9 AS3 // AS3 package com { import flash.display.MovieClip; import flash.events.Event; public class Strela { public function Strela() { // .. } public static function pohyb(target:MovieClip):void { target.i = 0; target.addEventListener(Event.ENTER_FRAME, animovani); } private static function animovani(thisEvent:Event):void { if (thisEvent.currentTarget.i < 50) { thisEvent.currentTarget.i++; thisEvent.currentTarget.x += 1; } else if (thisEvent.currentTarget.i == 50) { thisEvent.currentTarget.removeEventListener(Event.ENTER_FRAME, animovani); trace("end"); } } } } Tento script dej do stage - root nekde na zacatek casove osy importovani tridy Strela import com.Strela; var timeout:uint = setTimeout(startPohyb, 20, circle); var timeout2:uint = setTimeout(startPohyb, 350, circle2); var timeout3:uint = setTimeout(startPohyb, 720, circle3); function startPohyb(target:MovieClip):void { // zavolani metody pohyb() staticke tridy Strela, ktera pomoci parametru target zacne animovat MC circle, circle1... Strela.pohyb(target); } Testovano v Flash CS4 a funkcni pro FlashPlayer10. |
||
Jadro007 Profil * |
#6 · Zasláno: 21. 5. 2010, 20:02:13
Mám s tím tak trochu problém... :) Použil sem možnost s "prototype"...
Mám kód: // posune MC z aktuálního umístění o cil_x, cil_y za nastavenou dobu MovieClip.prototype.pohybThis = function (cil_x:Number, cil_y:Number, doba:Number):Void { obj = this; cil_x = this._x + cil_x; cil_y = this._y + cil_y; trace("pohyb"); var i = 0; var plus = 0.5/doba; var count = 0; var posuv_x = cil_x-obj._x; var posuv_y = cil_y-obj._y; var startX = obj._x; var startY = obj._y; obj.onEnterFrame = function() { count++; i += plus; obj._x = startX+posuv_x*(Math.sin(Math.PI*i)); obj._y = startY+posuv_y*(Math.sin(Math.PI*i)); if (count == doba) { delete obj.onEnterFrame; } }; }; onEnterFrame = function () { if (Key.isDown(Key.RIGHT)) { ctv.pohybThis(10, 0, 10); //ctv2.pohybThis(20, 0, 10); } if (Key.isDown(Key.RIGHT) && Key.isDown(Key.SHIFT) ) { ctv.pohybThis(10, 0, 2); } }; Pro jeden MC to funguje v pohodě MC1.pohybThis(100, 0, 3); ale když mám třeba: MC1.pohybThis(100, 0, 3); MC2.pohybThis(200, 0, 3); Udělá to tohle: jadro.ic.cz/problem.swf Nevíte kde je chyba? :) |
||
X Profil * |
#7 · Zasláno: 22. 5. 2010, 11:34:08
Ahoj, musis deklarovat promenne do daneho MovieClip (MC) pomoci this. Pokud je deklarujes pomoci var tak se smazou po vykonani funkce a pri udalosti onEnterFrame nejsou k nalezeni.
MovieClip.prototype.pohybThis = function(cil_x:Number, cil_y:Number, doba:Number):Void { this._doba = doba; this._cil_x = this._x+cil_x; this._cil_y = this._y+cil_y; //trace("pohyb"); this.i = 0; this.plus = 0.5/doba; this.count = 0; this.posuv_x = this._cil_x-this._x; this.posuv_y = this._cil_y-this._y; this.startX = this._x; this.startY = this._y; //trace("vars"); this.onEnterFrame = function():Void { //trace("enterFrame"); this.count++; this.i += this.plus; this._x = this.startX+this.posuv_x*(Math.sin(Math.PI*this.i)); this._y = this.startY+this.posuv_y*(Math.sin(Math.PI*this.i)); //trace(this+" "+this.count+" "+this._doba+" "+this.i); if (this.count == this._doba) { //trace("delete"); delete this.onEnterFrame; } }; }; MC1.pohybThis(100,0,3); MC2.pohybThis(200,80,3); |
||
Jadro007 Profil * |
#8 · Zasláno: 22. 5. 2010, 13:08:24
Díky moc všem za pomoc, už to funguje ;)
|
||
Časová prodleva: 14 let
|
0