Autor Zpráva
osi011
Profil
Chtěl bych udělat kolizi dvou Movie clipů, ale nějak mi na sebe nereagují. Oba vytvářím později pomocí attachMovie, takže nejspíše bude problém v cestě k nim, ale zkoušel jsem několik možností a stále mi nic nejde.

nepritel1 = this.attachMovie("nepritel1", "nepritel1", -1);
nepritel1._x=this._x-205;
nepritel1._y=this._y-200;


on(keyPress "<Space>"){

strela = this.attachMovie("strela", "strela", -1);

if (strela.hitTest( nepritel1 ) == true) {
nepritel1.gotoAndStop(2);
}
else{
nepritel1.gotoAndStop(1);
}
}
FlashManiac
Profil
nemuze byt problem ve vrstvach..? jak tak vidim tak mas 2x load MC do jedne vrstvy(zkus jeden davat do -2 a druhy do -1)

navic pokud dobre vidim tak ty teh hittest testujes jakmile stisknes klavesu...pokud ta strela ma nejakou dobu letu bylo by asi vhodnejsi to testovat na enterframe

jinak v adresaci se problem byti nezda...
osi011
Profil
Už jsem na to přišel. Bylo to v cestách k objektům, jak jsem myslel. Napadlo mě že při attachMovie se nově přidaný objekt vlastně stává instancí toho, na který se připojuje a je to tak :)

Rád bych ale po kolizi a přehrání dalšího framu z podmínky clip odstranil úplně. Něco jako v téhle metodě, ale tohle nefunguje...

onClipEvent(enterFrame)
{
if (this.strela.hitTest( this._parent.vesmir_pozadi.nepritel1 ) == true) {

if(this._parent.vesmir_pozadi.nepritel1.gotoAndStop(2)==true)
{
removeMovieClip(this._parent.vesmir_pozadi.nepritel1);
}
}
else{
this._parent.vesmir_pozadi.nepritel1.gotoAndStop(1);
}
}
XXX
Profil
Asi to bude tou podminkou.. predpokladam, ze to ma fungovat,kdyz ta animace bude na snimku 2, takze misto gotoAndStop(2) tam ma byt:

if(this._parent.vesmir_pozadi.nepritel1._currentframe==2)
osi011
Profil
Ten hitTest už mi funguje, je pořád ten objekt nechce zmizet.
Rád bych, aby se po kolizi přehrál další frame toho objektu

this._parent.vesmir_pozadi.nepritel1.gotoAndStop(2)


a pak ho smazal

this._parent.vesmir_pozadi.nepritel1.removeMovieClip();

Jenže se to nefunguje. Když to nechám v tomto pořadí, tak se druhý frame ani nepřehraje a rovnou se odstraní.

To samé u

if(this._parent.vesmir_pozadi.nepritel1._currentframe==2)


Prosím o radu jak na to.
XXX
Profil
tak to napis takhle:




onClipEvent(enterFrame) {
if (this.strela.hitTest( this._parent.vesmir_pozadi.nepritel1 )) {
this._parent.vesmir_pozadi.nepritel1.gotoAndStop(2);
}else{
this._parent.vesmir_pozadi.nepritel1.gotoAndStop(1);
}
}



a do toho tvojeho movieClipu nepritel1 dej na druhy snimek skript:

this.unloadMovie();
XXX
Profil
to je vlastne blbost. musis tam dat gotoAndPlay(2); a ten posledni skriptik dat na 3 snimek, at se ti ten druhy prehraje, prejde to na dalsi a tam to hned zmizi ;-) bude to teda vypadat takhle:

onClipEvent(enterFrame) {
if (this.strela.hitTest( this._parent.vesmir_pozadi.nepritel1 )) {
this._parent.vesmir_pozadi.nepritel1.gotoAndPlay(2);
}else{
this._parent.vesmir_pozadi.nepritel1.gotoAndStop(1);
}
}

a tohle bude na 3. snimku movieClipu nepritel1:
this.unloadMovie();
osi011
Profil
Bohužel mi to nefunguje. Ta metoda unloadMovie() ten objekt odstraní pouze, když se na ni odkazuji v druhém snímku, ale druhý snímek už nezobrazí. Ve třetím snímku metoda nějak nereaguje...
XXX
Profil
treti snimek, ve kterem je metoda unloadMovie() musi byt klicovy (F6) a ve snimku 2 nesmi byt zadna akce stop, aby animace presla na snimek 3. doporucil bych do snimku dat prikaz trace pro kontrolu, jestli se animace na ten snimek vubec dostane:
trace("3.snimek animace");

takhle by to urcite melo fungovat...
osi011
Profil
První, druhý i třetí snímek je klíčový a jen třetí obsahuje this.unloadMovie(); . Trace ukázal vše v pořádku, ale objekt zůstal zobrazen.
XXX
Profil
no zda se mi to nelogicke,ale jeste me napada,jestli to neni tim,ze je ten treti snimek prazdny. zkusil bych jeste teda do toho tretiho zkopirovat presne to,co je v tom druhem-myslim obsah toho snimku,ne skript a vsechnu tady nastavit _alpha = 0,takze to tam bude,ale bude to pruhledne. takhle by to mohlo fungovat ;-) skript tam zustane, jaky tam byl-this.unloadMovie();
Toto téma je uzamčeno. Odpověď nelze zaslat.