Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Ошибки из за пользовательского курсора (http://www.flasher.ru/forum/showthread.php?t=169499)

Vansimar 06.10.2011 11:43

Ошибки из за пользовательского курсора
 
у меня есть класс кусора
Код AS3:

package src
{
        import src.*;
        import flash.display.MovieClip;
        import flash.display.*;
        import flash.events.Event;
        import flash.events.MouseEvent;
        import flash.ui.Mouse;
 
        public class Cursor extends MovieClip
        {
 
                private var cursor:MovieClip;
 
                public static var kur:Cursor;
 
                public function Cursor(_stage:DisplayObjectContainer, _cursor:MovieClip)
                {
                        kur = this;
 
                        cursor = _cursor;
 
                        cursor.name = "lisp_cur";
 
                        addChild(cursor);
 
                        for (var i:int = 0; i < numChildren; i++)
                        {
                                trace(getChildAt(i).name);
                        }
 
                        _stage.addEventListener(Event.MOUSE_LEAVE, cursorHide);
                        _stage.addEventListener(MouseEvent.MOUSE_MOVE, cursorFollow);
                        Mouse.hide();
 
                }
 
                public function delLis():void
                {  //удаляю слушатели
                        removeEventListener(Event.MOUSE_LEAVE, cursorHide);
                        removeEventListener(MouseEvent.MOUSE_MOVE, cursorFollow);
                }
 
                private function cursorHide(evt:Event):void
                {
 
                        cursor.visible = false;
                }
 
                private function cursorFollow(evt:MouseEvent):void
                {
                        if (!cursor.visible)
                                cursor.visible = true;
                        cursor.x = stage.mouseX;
                        cursor.y = stage.mouseY;
                        evt.updateAfterEvent();
                }
        }
}

я его вызываю в классе Main
Код AS3:

public function initCursor():void
                {
                        _cursor = new Cursor(stage, new Lip());
                        _cursor.mouseChildren = false;
                        _cursor.mouseEnabled = false;
                        addChild(_cursor);
                }

потом в другом классе мне нужно удалить этот курсор,и заново добавить чтоб он был в последней глубине отображения(наверху), делаю так
Код AS3:

Cursor.kur.delLis();
                        Main.main.removeChild(Main.main._cursor);
                        Main.main.initCursor();

но выскакивает ошибка TypeError: Error #1009: Не удается вызвать свойство или метод со ссылкой на объект "null".
at src::Cursor/cursorFollow() что можно сделать чтоб исправить ошибку?

Bgg 06.10.2011 11:53

cursor = null

И вопрос _cursor и cursor и main._cursor - это все одно и тоже?

Inet_PC 06.10.2011 11:56

Цитата:

Код AS3:

Main.main.


Три раза не повторяю, не повторяю, не повторяю...

Vansimar 06.10.2011 12:02

_cursor это аргумент конструктора класса Cursor,cursor это переменная типа мувиклип, а main._cursor это ссылка на объект класса Cursor

goodguy 06.10.2011 12:03

Цитата:

Cursor.kur.delLis();
Main.main.removeChild(Main.main._cursor);
Жесть какая. Да тут надо вообще все перелопачивать.

Vansimar 06.10.2011 12:09

как можно исправить проблему не переписывая все?

Bgg 06.10.2011 12:13

Нет. Удаляйте все, и делайте заново.

Vansimar 06.10.2011 12:14

я по другому не знаю как делать

Добавлено через 1 минуту
у меня в игре персонажи создаются динамически в каждом уровне,и курсор постоянно проваливается под них если не пересоздавать курсор..

goodguy 06.10.2011 12:18

Могу предложить такой вариант:
Код AS3:

if( Main.main._cursor.parent)
      Main.main._cursor.parent.setChildIndex(Main.main._cursor, Main.main._cursor.parent.numChildren -1); // тупо переставляем курсор поверх всего

Или какая там структура.
Короче это однозначно быдлокод, но позволит не переделывать все

Bgg 06.10.2011 12:19

Цитата:

Сообщение от Vansimar (Сообщение 1037288)
у меня в игре персонажи создаются динамически в каждом уровне,и курсор постоянно проваливается под них если не пересоздавать курсор..

Создайте отдельные слои для курсора, персонажей, интерфейса и тд. и тп.

Vansimar 06.10.2011 12:21

т.е. где таймлайн там создать слой а потом туда добавлять программно курсор,я правильно понял?

Добавлено через 2 минуты
или для каждой группы объектов создать спрайт? а потом добавлять на сцену?

Bgg 06.10.2011 12:27

Таймлайны вообще не трогайте. На нем должен быть один кадр и один слой.

Vansimar 06.10.2011 12:32

это то есть вот так нужно сделать
Код AS3:

public static var bgLayer:Sprite;
public static var persLayer:Sprite;
public static var cursLayer:Sprite;
//а потом
addChild(bgLayer);
addChild(persLayer);
addChild(cursLayer);
//а потом добавлять в них остальное так cursLayer.addChild(...);

так?

goodguy 06.10.2011 12:36

Так сразу же будет ошибка из-за ссылки на объект null.
Нужно создавть экземпляры этих спрайтов.
Да и зачем они определены как static?

Vansimar 06.10.2011 12:52

ошибся,static не нужен

Inet_PC 06.10.2011 14:39

Только не давно же обсуждали уже слои для курсора, поиск не рулит?

Vansimar 06.10.2011 14:42

Да вот только сейчас в них разобрался)

savva 06.10.2011 14:47

может курсор добавлять в addchildat[0] ?

Vansimar 06.10.2011 14:50

Так не пройдет)

Добавлено через 3 минуты
по слоям самое то

goodguy 06.10.2011 15:19

Цитата:

может курсор добавлять в addchildat[0] ?
Это чтобы его вообще не было? =)
Крутая игра без курсора

in4core 06.10.2011 16:44

ну поставить проверку на чайлдИндекс

Например в методое onMouseMove напиисать if(stage.getChildIndex(_cursor) < stage.numChildren-1) поднять вверх!

Inet_PC 06.10.2011 17:21

in4core, зря Вы так, это все от лукавого((, тем более недавно все обсуждалось


Часовой пояс GMT +4, время: 19:18.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.