Keresés
Hírlevél
 
Kiemelt témák
»Hogy viszonyul ehhez a család?
»Legjobb metodika emberi relációk tárolására
»A programozó hibája, hogy törik a programját?
»Jogosultság kezelés mezőszinten
Állás/munka
»Wordpress szakértőt keresünk
»Kamu álláshirdetők listája
»Front-end fejlesztő / Sitebuilder
»DataStore Developer
»PHP programozó, webfejlesztő munkát keres
» több téma
Tudástár
Oldalon keresés 8x írja ki az eredményt
?XML-ből sok szövegmező
?Input mezőből visszakapott adat probléma
TinyMCE és az ékezetek
?Rengeteg hasonló kép betöltése gyorsan (PHP)
Ékezetes kar. nem minden táblában jól
?Shelltreeview gond
Grafikon rajzolás probléma
?Onclick= php függvény
?Egyenes megrajzolása
?Access-ből adott xml fájl kinyerése
Listázás időpont szerint
Exportálás változó könyvtárba
*Link eredményének kiolvasása
Imagemapre képet
» több téma
Társalgó
»A programozásból jól meg lehet élni?
»MFC tanulás
»Könyvet adok-veszek
»Hogy viszonyul ehhez a család?
»Nintendo wii
»Letölthető az új Rad Studio XE és Delphi XE
»Weblap véleményezés
»Játékmotor elmélet
»Informatikai bulvárlap
»Delphi-ről C++-ra váltás
» több téma
ASP  |  C#  |  C++  |  CSS  |  Delphi  |  Flash  |  HTML  |  Java  |  JavaScript  |  Pascal  |  Perl  |  PHP  |  Python  |  Visual Basic  |  Visual C++  |    »    

Tudástár

»

Szinpadon elhelyezett Symbol kezelése AS3-ban

»

Szinpadon elhelyezett Symbol kezelése AS3-ban

nyitotta: akosnagy, idő: 2010.03.13., moderátor: moderator
  Értesítés változás esetén Felvétel kedvencekhez Küldés emailben Nyomtatható verzió

Kategóriák:Web-programozás » Flash

Sorrend:
Időzóna:
Blokkméret:
Szia mindenki!

Próbálok érthetően fogalmazni, remélem sikerül.

Most ismerkedek a CS4 AS3-mal. Eddig Flash 8-at használtam. A gondom az, hogy ha a szinpadon elhelyezek valamit, akármit pl. button, textfield, mc, stb., azt Flash 8-ban scriptből nyugodtan kezelhettem. Most van a szinpadon egy button és 2 textfield, egy movieclip-ben. Ezeket szeretném külső Script file-ból kezelni. Ha nem külső a script akkor megy is, de amint kirakom külön .as-be undefinednek jelzi a komponenseket a színpadon. Arra találtam példát, hogy ha az .as-ben hozom létre a gombot, meg a többit akkor hogyan kezeli, de én jobb szeretek közvetlen a szerkesztőben rajzolgatni. Egyszerűbb nekem. Mellékelem az .as-t, hátha érthetőbb a problémám.

package
{

import flash.display.*;
import flash.events.*;
import flash.net.*;

public class chatGUIhandler extends MovieClip
{
var phpUrl:String;
var phpLoader:URLLoader;

public function chatGUIhandler()
{
phpLoader = new URLLoader;
mc_login.btn_login.addEventListener(MouseEvent.CLICK,onLoginButtonClick);
phpLoader.addEventListener(Event.COMPLETE,onLoadComplete);
phpLoader.addEventListener(IOErrorEvent.IO_ERROR,onLoadError);
}

function onLoginButtonClick(event:Event):void
{
mc_welcome.txt_welcome.text += " Button clicked";
phpUrl = "http://localhost/chat/flash/login.php";
var request:URLRequest = new URLRequest(phpUrl);
//Az URLVariables osztály segítségével adjuk át a számunkat
var variables:URLVariables = new URLVariables();
variables.user = mc_login.txt_loginuser.text;
variables.pass = mc_login.txt_loginpass.text;
//Elmentjük a küldeni kívánt adatot
request.data = variables;
//Megadjuk hogy a POST metódust szeretnénk használni az adatok küldésénél
request.method = URLRequestMethod.POST;

phpLoader.load(request);
}

function onLoadComplete(event:Event):void
{
mc_welcome.txt_welcome.text += " Válasz: ";
mc_welcome.txt_welcome.text += event.target.data;
mc_welcome.txt_welcome.text += "("+event.target.data.length+")";
mc_welcome.txt_welcome.text += " Vége ";
}

function onLoadError(event:Event):void
{
mc_welcome.txt_welcome.text += "Load error";
}

}//class
}//package

Természetesen az .fla-ban importálom az .as-t és példányosítom is. A fordító hibaüzenete

1120: Access of undefined property mc_login.
1120: Access of undefined property mc_welcome.

Ez persze minden hivatkozásra kijön.

Köszi a segítséget
Üdv.

Deklaráld őket az elején így:
private var mc_login:MovieClip;
private var mc_welcome:MovieClip;
Ühüm, így a hibaüzenet megszűnt, viszont az swf nem működik. Nem reagál a gomb lenyomására.
A
var phpUrl:String;
var phpLoader:URLLoader;
után tettem be a deklarációt. Próbáltam private-ként és public-ként is.

Ennyi van a fla-ban.

import chatGUIhandler;
var GUIhandler:chatGUIhandler = new chatGUIhandler();
stop();

Lehet itt a gond?
Ha jól emlékszem, akkor bemész oda, hogy File>PublishSettings>Flash fül
Az ActionScript mellett a Settings beállításoknál vedd ki a pipát az Automatically Declare Stage Instances mellől.
Egyenlőre nem, de találtam egy hibát.
Ha CTRL+ENTER-rel flash-ben indítom akkor az output ablakban jön a hibaüzenet:

TypeError: Error #1009: Cannot access a property or method of a null object reference.
at chatGUIhandler()
at chatClient_fla::MainTimeline/frame3()

a fream3-mon van az inport, meg a példányosítás
trace-vel szűkítettem a hiba helyét. Ez a sor váltja ki:

mc_login.btn_login.addEventListener(MouseEvent.CLICK,onLoginButtonClick);

public function chatGUIhandler() {
  addEventListener(Event.ADDED_TO_STAGE, addedToStage);
}
private function addedToStage(e:Event) {
  removeEventListener(Event.ADDED_TO_STAGE, addedToStage);
  //Itt kezdd el amit eddig konstruktorban csináltál!
}

ADDED_TO_STAGE: gondolom az esemény neve magáért beszél...
(A rendszer nem engedi módosítani az előző hozzászólásom)
mc_login
Helyett
MovieClip(mc_login).btn_login.
Asszem valamit nagyon elbarkácsolhattam már az alapoknál.
Így sem megy. Az eventlistener-t hozzáadja, de a function-be nem lép be, akármit csinálok. Trace-val ellenőriztem szokás szerint.

Lehet nem fogom szeretni az AS3-t?
Nem értem. Mi nem megy?
(Kódot)
Nekem az alábbi módon tökéletesen megy:

Az osztályt ne frémen import-tal hívd be, hanem a Stage properties részén van egy olyan, hogy Document class: és oda írd be csak így "chatGUIhandler".

A stage-en lévő elemekről szedd le az "Export for Actionscript"-et.

Az osztályodban nem kell deklarálnod a stage-en lévő elemek egyikét sem, csak csináld úgy, ahogy legelőször beírtad.

Utána nem kell import-tal hívnod az osztályt, csak hivnod kell a függvényeit.
A chatGUIhandler.as így néz ki most:

package
{

import flash.display.*;
import flash.events.*;
import flash.net.*;

public class chatGUIhandler extends MovieClip
{
private var phpUrl:String;
private var phpLoader:URLLoader = new URLLoader;
private var mc_login:MovieClip;
private var mc_welcome:MovieClip;

public function chatGUIhandler()
{
addEventListener(Event.ADDED_TO_STAGE, addedToStage);
trace("add satge handler");
}

private function addedToStage(event:Event)
{
trace("Belépés a GUI handlerbe");
removeEventListener(Event.ADDED_TO_STAGE, addedToStage);
//Itt kezdd el amit eddig konstruktorban csináltál!

trace("1.1");
trace("1.2");
MovieClip(mc_login).btn_login.addEventListener(MouseEvent.CLICK,onLoginButtonClick);
trace("1.3");
phpLoader.addEventListener(Event.COMPLETE,onLoadComplete);
trace("1.4");
phpLoader.addEventListener(IOErrorEvent.IO_ERROR,onLoadError);
trace("1.5");
}

function onLoginButtonClick(event:Event):void
{
MovieClip(mc_welcome).txt_welcome.text += " Button clicked";
phpUrl = "http://localhost/chat/flash/login.php";
var request:URLRequest = new URLRequest(phpUrl);
//Az URLVariables osztály segítségével adjuk át a számunkat
var variables:URLVariables = new URLVariables();
variables.user = MovieClip(mc_login).txt_loginuser.text;
variables.pass = MovieClip(mc_login).txt_loginpass.text;
//Elmentjük a küldeni kívánt adatot
request.data = variables;
//Megadjuk hogy a POST metódust szeretnénk használni az adatok küldésénél
request.method = URLRequestMethod.POST;

phpLoader.load(request);
}

function onLoadComplete(event:Event):void
{
MovieClip(mc_welcome).txt_welcome.text += " Válasz: ";
MovieClip(mc_welcome).txt_welcome.text += event.target.data;
MovieClip(mc_welcome).txt_welcome.text += "("+event.target.data.length+")";
MovieClip(mc_welcome).txt_welcome.text += " Vége ";
}

function onLoadError(event:Event):void
{
MovieClip(mc_welcome).txt_welcome.text += "Load error";
}

}//class
}//package

A .fla állományban a script:
import fl.lang.*;
import chatGUIhandler;
trace("1");
var GUIhandler:chatGUIhandler = new chatGUIhandler();
trace("2");
/*
btn_en.addEventListener(MouseEvent.CLICK,onLangENButtonClick);
btn_hu.addEventListener(MouseEvent.CLICK,onLangHUButtonClick);

function onLangENButtonClick(event:Event):void
{
Locale.loadLanguageXML('en');
trace("en");
}

function onLangHUButtonClick(event:Event):void
{
Locale.loadLanguageXML('hu');
trace("hu");
}
*/
trace("3");
stop();

CTRL+ENTER-rel futtatáskor az OUTPUT ablak tartalma:
1
add satge handler
2
3

Akármit csinálok a szinpadon, akármit nyomkodok az OUTPUT nem változik. Holott a function-ben is van pár Trace(). Az mc_welcome jelenleg nyomkövetésre van beállítva, a php válaszának ellenörzésére, de odáig el se jut a cucc.
var GUIhandler:chatGUIhandler = new chatGUIhandler();
a fenti sor után...
addChild(GUIhandler)
De igazából ez az osztály igen csak értelmetlen.....
Fordításilag hibátlan, futás közben output:

1
add satge handler
Belépés a GUI handlerbe
1.1
1.2
TypeError: Error #1009: Cannot access a property or method of a null object reference.
at chatGUIhandler/addedToStage()
at flash.display::DisplayObjectContainer/addChild()
at chatClient_fla::MainTimeline/frame3()
2
3

És az induláskor rögtön. Az egérhez, billentyűzethez hozzá se érek.
"Export for Actionscript" ezt nem tudom mi A settings-flash fül-actionscript settings-re gondolsz amit tegnap mondtál?
Nem. A Library-ban vannak elemeid. Azoknak a properties-jében van olyan, hogy export for actionscript. Ha be van pipálva, akkor azoknál szedd ki a pipát, és csináld úgy ahogy írtam a többit.
Úgy csináltam ahogy írtad. Output ablak
TypeError: Error #1009: Cannot access a property or method of a null object reference.
at chatGUIhandler()
Erre a sorra:
MovieClip(mc_login).btn_login.addEventListener(MouseEvent.CLICK,onLoginButtonClick);

Ha kiveszem a MoviClip()-et akkor is ua.
Az osztályod tartalma az legyen, amit legelőször bemásoltál.
Az a tartalma. Innen CTRL-C, CTRL-V.
A hiba ua.
A movieclip-ek instance nevei stimmelnek? Azaz van a stage-en olyan mc aminek az instance name-je mc_login és azon belül btn_login?
Igen stimmelnek. Sőt, ha nem külön .as file-ba rakom, hanem a .fla egy külön Layer-ére akkor működik is a dolog. Külső .as-ból nem hajlandó menni.
Tedd fel a forrást valahova, letöltöm és megnézem, ha az úgy jó neked.
Nos megvan a hiba! Asszem amatőr voltam Segond.

Annyi volt a probléma, hogy a mozi első 2 frame-je üresen volt hagyva későbbi preloader céljából. Ami eddig megvolt az a 3. frame-en kezdődött. Töröltem az első két üres frame-et és működik.

Köszönöm vinie. Ott a pont.
Belépés
E-mail cím:
Jelszó:

RSS források
-Hírek
-Cikkek
-Fórumok
-Állás/munka
Top pontgyűjtők
»Micu1.030
»Interlock280
»mezofi150
»Pitta_100
»Frostech0100
»szbzs.2100
»Riha60
»Akhiles50
»mrchandra50
»Bakter50
Top wikieditorok
»Sting
»Doi
»FlamingClaw
»Argathron
»Csaboka2
»Vodka
»Joexy
»Ivn
»Balucinho
»Kelemzol
» ugrás a wikire
A nap kifejezései
»Algoritmus
»Hogyan kezdjem el
»Perl
» ugrás a wikire
Hírek
»Megérkezett a PostgreSQL 9.0 kiadásra jelölt változata
»Letölthető az új Rad Studio XE és Delphi XE
»Function-X digitális művészeti találkozó és demoscene party
»Webfejlesztőknek szóló közösségi oldalt indított a Microsoft
»Letölthető a hardvergyorsított Chrome 7 első fejlesztői kiadása
» több hír
PC Fórum hírek
»Itt az első kép az AMD nyolcmagos processzoráról
»"Szuperdizájnos" érintő-egeret mutatott be a Microsoft
»Szabadalmaztatta a számítógép kikapcsolását a Microsoft
»Vírusriadót váltott ki a webezőknél a Google
»Ingyen iWiW-ezhetnek mobiljaikról a T-Mobile-osok
»Automatikusan kiválogatja legfontosabb leveleink a Google
»OOo4Kids - ingyenes Office csomag gyerekeknek
»Új, gyorsabb Core i3 és Pentium processzorokat jelentett be az Intel
Tagi blogok
»PSP
»Első Programozó
»USB
»PHP, mint sablonmotor egyszerűen