Autor Zpráva
Vrfy
Profil *
Uz delsi chvili zkousim prijit, proc mi nejde zavola hitTestObject uvnitr jineho objectu.
Situace:
Mam objekt Brick(Z MovieClipu)
vytvorim v nem objekt Shape
var rectangle.Shape = new Shape;
//zde definuji velikost a vypln
this.addChild(rectangle)`

a pak zkousim zavolat metodu
if(rectangle.hitTestObject(Object)) {...}
tak to nejde
(zkousel jsem dat rectangle jako MovieClip, ktery obsahuje Shape, zkousel jsem napsat i this.rectangle a porad to nefunguje, ale pokud dam jen this.hitTestObject(Object) tak to funguje bez problemu. Je mozno nejak volat metodu hitTestObject na dite nejakeho objektu? Teoreticky nevidim duvod, proc by to nemelo fungovat, ale v praxi to nefunguje.

//Omlouvam se za psani bez diakritiky, ale jsem na cizim pocitaci, kde je jen anglicka klavesnice a zmenit to nejde.
Maras
Profil
Myslím, že ten object by jsi měl definovat jako:

(MovieClip(parent).Object)
Vrfy
Profil *
Maras:
Který object máš na mysli? Kam bych měl tenhle kód napsat? Nebi mi prosím vysvětli ten kód. (Jak to chápu já, tak to přistoupí k objectu, který je dítětem rodiče aktuálního objektu.) Díky.
Maras
Profil
if(rectangle.hitTestObject(MovieClip(parent).Object)) {...}

To zjistí, jestli rectangle(například Ruka) uvnitř MovieClipu (například Hrdina) koliduje s jiným objektem(například Strela).

S tím, že movie clip střely a hrdiny jsou ve stejné vrtsvě (například na stage, nebo v dalším MovieClipu)

Kód patří do MovieClipu hrdina.

Takže pokud kulka trefí ruku hrdiny(kód uvnitř MovieClipu hrdina):
if(Ruka.hitTestObject(MovieClip(parent).Strela)) {
// Odstran ruku :-)
}



E:
a ještě, pokud chceš mít kód někde víc po ruce tak:

if(Hrdina.Ruka.hitTestObject(MovieClip(parent).Strela)){} // tento kód patří do třídy, která ovládá stage popřípadě movie clip
Vrfy
Profil *
Diky, ale bohuzel ten problem je v tom, ze kdyz tam tam dam ruka, tak to nefunguje. Problem by nemel byt s Object, protoze reference na tento Object je predavana pri vytvoreni instance Hrdina.
Vynatek z kodu:
public class Brick extends MovieClip {

public var listofballs;
protected var southwall;

public function Brick(stage,listofballs){
this.listofballs=listofballs;
var southwall:MovieClip = new LineMovieClip(parametry)`
addChild(southwall);
stage.addEventListener(Event.ENTER_FRAME, CheckHit);
}
public function CheckHit(event:Event) {
for each (var value:Ball in listofballs){
if (southwall.hitTestObject(value)){
trace("Zasah.");
}
}
}

toto hazi chybu: TypeError: Error #1010: Termin neni definovany a nema zadne vlastnosti. at main::Brick/CheckHit()

nicmene kdyz tam misto southwall dam this, tak to funguje paradne. Ocividne to vypada,ze to nemuze pristoupit k southwall. protoze kdyz kod obmenim a dam tam'
if (value.hitTestObject(this.southwall))
tak to pise chybu:
TypeError: Error #2007: Parametr hitTestObject nesmi byt null.
at flash.display::DisplayObject/_hitTest()
at flash.display::DisplayObject/hitTestObject()
at main::Brick/CheckHit().

Fakt uz nevim, jak co s tim.


kdyz funcki CheckHit definuji pro objekt LineMovieClip a zkusim proto pridat Listener pomoci stage.addEventListener(...);
tak mi to pise chybu:
TypeError: Error #1006: addEventListener neni funkce.
at main::LineMovieClip()
at main::Brick()
at main::Game/frame1()

pritom, kdyz stejny kod pouzivam v tride Brick, tak to funguje, ale jakmile to spustim z potomka tridy Brick (tj. v LineMovieClip) tak mi to vyhodi tuhle chybu.
Vrfy
Profil *
hmm, ocividne to vubec tu tridu nevidi, protoze kdyz dam:
var southwall:LineMovieClip = new LineMovieClip(parametry);
addChild(southwall);
if(this.getChildByName("southwall")){
   trace("ma dite southwall");
   }

tak to nic neudela
nebo kdyz pridam do konstruktoru tridy
var testovaci = "Testovaci";

a pal uvnitr tridy Brick:
trace(southwall.testovaci);

tak to vypise undefined, ovsem veskera grafika te tridy je videt, takze trida se inicializuje normalne
protoze kdyz
trace(southwall.testovaci);
zavolam uvnitr tridy LineMovieClip, tak to v poradku vypise Testovaci.
Vrfy
Profil *
Dobre, vypada to, ze uz mam reseni, ale nevim proc funguje. :D
kod
 var southwall:LineMovieClip = new LineMovieClip(parametry);

jsem nahradil kodem
this.southwall = new LineMovieClip(parametry);

s funkci
public function CheckHit(event:Event) { 
   for each (var value:Ball in listofballs){ 
      if (southwall.hitTestObject(value)){ 
         trace("Zasah."); 
      } 
   } 
} 
Po zasahu to spravne ukaze zasah.

ovsem stale nefunguje
if(this.getChildByName("southwall")){
   trace("ma dite southwall");
   }

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0