![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|
|
|||||
|
Регистрация: Sep 2008
Сообщений: 6
|
Я добавляю в библиотеку символ obj и закрепляю за ним класс objClass, содержащий метод getFlag(). На сцену навешиваю класс MainClass, в котором создаю несколько объектов obj. Как после этого обратиться к одному из этих объектов и вызвать у него метод getFlag?
// objClass
package
{
import flash.display.MovieClip;
import flash.events.MouseEvent;
import flash.net.URLRequest;
import flash.display.Loader;
public class objClass extends MovieClip
{
public var myflag:Boolean;
public function objClass ()
{
}
public function getFlag ():String
{
if (myflag==true) return "yes";
else return "no";
}
}
}
// mainMenu
package
{
import flash.display.MovieClip;
import flash.events.MouseEvent;
import flash.utils.getDefinitionByName;
import flash.display.DisplayObject;
import obj;
public class MainMenu extends MovieClip
{
var i:Number;
var n:Number = 7;
var names:Array=new Array();
var flag:String;
function MainMenu()
{
CreateImObjects();
}
function lookForFlags (event:MouseEvent):void
{
//просмотреть у всех объектов метод getFlag, чтоб понять, какой из них нажат
event.target.getFlag();
}
function CreateImObjects ():void
{
for (i=0;i<=n;i++)
{
names.push("mc"+i);
trace (names[i]);
}
for (i=0; i<=n; i++)
{
var myObj = new obj();
myObj.x=80 + i*150;
myObj.y=137;
myObj.name = names[i];
this.addChildAt(myObj,4+i);
trace (myObj.name);
myObj.addEventListener(MouseEvent.CLICK, lookForFlags);
}
}
}
}
Последний раз редактировалось iNils; 17.09.2008 в 15:25. |
|
|||||
|
Оформи код тегами [code]
А то что тут прочитать можно??? |
|
|||||
|
Регистрация: Jul 2007
Адрес: Москва
Сообщений: 996
|
Классы именуются со строчной буквы, например, MyClass.
Ваш код не вызывает ошибок компиляции? Описан objClass, а импортируете obj. Через target можно обратится, только так грамотнее: А почему getFlag возвращает String если можно Boolean? |
|
|||||
|
Регистрация: Sep 2008
Сообщений: 6
|
спасибо за ответ.
obj - это имя символа в моей библиотеке, у которого базовый класс ObjClass. Вроде бы достаточно импортировать именно его. Во всяком случае, никогда раньше проблем не возникало. после trace((event.target as obj).getFlag()); появилась ошибка : #1009: Cannot access a property or method of a null object reference. |
|
|||||
|
Регистрация: Jul 2007
Адрес: Москва
Сообщений: 996
|
В окне Symbol Properties есть поля:
Name: никак не связано с кодом. Class: класс, соответствующий символу. Base class: базовый класс класса, соответствующего символу. Итак, что у Вас прописано в Class? |
|
|||||
|
Потому что у вас event.target не сам объект потомок ObjClass, а какой-то из его display child object-ов.
Я предпочитаю приведение типов делать так: , а не В первом случае вылезет эксепш, а во втором вы можете молча получить null
__________________
Сам себе репортер |
|
|||||
|
Регистрация: Sep 2008
Сообщений: 6
|
класс obj
базовый класс ObjClass на самом деле, все получилось, ошибка исчезла) Большое спасибо mre!) |
|
|||||
|
Регистрация: Jul 2007
Адрес: Москва
Сообщений: 996
|
|
|
|||||
|
стервочка (я мужик)
|
2terbooter:
а ещё первый способ медленнее. а ещё первый способ на самом деле не приведение типов, а конвертация типов. а ещё первый способ может вернуть не тот же объект, а уже новый. а ещё именно потому, что он выбрасывает эксепшн, я бы его не рекомендовал использовать. так как ставить везде и всюду try .. catch, вместо обычного if .. else, не самый адекватный вариант. |
![]() |
![]() |
Часовой пояс GMT +4, время: 11:14. |
|
|
« Предыдущая тема | Следующая тема » |
|
|