eroare inexplicabila .....

Intrebari despre Actionscript 3.0

eroare inexplicabila .....

Mesajde ciorty » Vin Oct 12, 2012 3:04 pm

Nu mai inteleg nimic.
Am o mica scena simplificata la minim:
Un "ego" care se trage cu mouse-ul si un "inamic" care detecteaza tot timpul daca eu sunt in spatele unor obiecte sau nu.
E simplu:
l-am facut chiar in timeline
FLA-ul e in atashament

Cod: Selectaţi tot
var k:int = new int();
var m:int = new int();
var trage:int = new int()

ego.buttonMode = true

var enemyView:Sprite =  new Sprite()
var linia:Graphics = enemyView.graphics
addChild(enemyView)
linia.lineStyle(1, 0x333333);
linia.moveTo(inamicul.x,inamicul.y);
linia.lineTo(ego.x,ego.y);

var f1:Rectangle = enemyView.getRect(stage);
var o1:Matrix = enemyView.transform.matrix;
var bD1:BitmapData
var p1:Point

var f2:Rectangle = cladirea1.getRect(stage);
var o2:Matrix = cladirea1.transform.matrix;
o2.tx = cladirea1.x - f2.x;
o2.ty = cladirea1.y - f2.y;   
var bD2:BitmapData = new BitmapData(f2.width, f2.height, true, 0);
bD2.draw(cladirea1, o2);      
var p2:Point = new Point(f2.x, f2.y);

ego.addEventListener(MouseEvent.MOUSE_DOWN, incepi);
ego.addEventListener(MouseEvent.MOUSE_UP, ridica);
addEventListener(Event.ENTER_FRAME, handleEnterFtrame);

function incepi(event:MouseEvent):void {
   trage = 1
   k = ego.x - mouseX;
   m = ego.y - mouseY;
}

function ridica(event:MouseEvent):void{
   trage = 0
}

function handleEnterFtrame(event:Event):void {   
   if(trage ==1){
      ego.x = mouseX + k
      ego.y = mouseY + m
   }
   
   linia.clear()   
   linia.lineStyle(1, 0x333333);
   linia.moveTo(inamicul.x,inamicul.y);
   linia.lineTo(ego.x,ego.y);

   f1 = enemyView.getRect(stage);
   o1 = enemyView.transform.matrix;
   o1.tx = enemyView.x - f1.x;
   o1.ty = enemyView.y - f1.y;   
   bD1= new BitmapData(f1.width, f1.height, true, 0);
   bD1.draw(enemyView, o1);
   p1 = new Point(f1.x, f1.y);

   if(bD2.hitTest(p2,100,bD1,p1,100)== true){
      enemyView.alpha = 0.2
   }
   
   if(bD2.hitTest(p2,100,bD1,p1,100) == false){
      enemyView.alpha = 1.0
   }
}



Si chiar functioneaza.
Dar nu pot sa scap sub nici o forma de eroarea asta:
Cod: Selectaţi tot
ArgumentError: Error #2015: Invalid BitmapData.
at flash.display::BitmapData/ctor()
at flash.display::BitmapData()
at view_fla::MainTimeline/handleEnterFtrame()


Nu am nici o idee. Am incercat toate variantele posibile.....
Fişiere ataşate
view.fla
(8.73 KiB) Descărcat de 183 ori
ciorty
 
Mesaje: 166
Membru din: Dum Aug 24, 2008 2:29 pm

Re: eroare inexplicabila .....

Mesajde Barna Biro » Vin Oct 12, 2012 7:52 pm

Daca te uiti atent, vei observa ca "f1" are height-u 0 ( f1 = enemyView.getRect(stage); din handler-u de ENTER_FRAME )
...iar 0 nu este o valoare valida de height ( sau width ) pentru BitmapData ( crapa treaba pe linia 56 ).

PS: Foloseste getBounds(); in loc de getRect(); ( ai totusi de-a face cu o linie de 1px in inaltime )
PPS: ...sau foloseste-te direct de proprietatile width si height ale obiectului concret.
Imagine
Avatar utilizator
Barna Biro
Administrator
 
Mesaje: 2037
Membru din: Vin Iul 25, 2008 1:06 am
Localitate: Lucerne, Switzerland

Re: eroare inexplicabila .....

Mesajde ciorty » Sâm Oct 13, 2012 7:33 am

perfect !!
getBounds este mult mai rapid.
Azi fac "inamicul" obiect sa vad cat imi incarca procesorul, si mai ales daca cumva reapare eroarea la punerea in scena a mai multora.
Multumesc
ciorty
 
Mesaje: 166
Membru din: Dum Aug 24, 2008 2:29 pm


Înapoi la ActionScript 3.0

Cine este conectat

Utilizatorii ce navighează pe acest forum: Majestic-12 [Bot] şi 1 vizitator

cron