Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > Flash > Общие вопросы о Flash (не затрагивающие ActionScript)

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 23.10.2006, 07:54
udaaff вне форума Посмотреть профиль Отправить личное сообщение для udaaff Найти все сообщения от udaaff
  № 1  
Ответить с цитированием
udaaff
...

модератор форума
Регистрация: Sep 2006
Адрес: Minsk
Сообщений: 4,286
По умолчанию синтаксис в AS 2.0

ранее заморачивался немного AS 1.0,седне пробило сел за AS 2.0 выстрадал вот это (сокращенный вариант):
Код:
class Movement {
	function Movement() {
	}
	static function moveBehindTheMouse(mc:MovieClip, dl:Number):Void {
		mc.onEnterFrame = function() {
			this._x += (_xmouse - mc._x) * dl;
			this._y += (_ymouse - mc._y) * dl;
		};
	}
}
хотелось бы Please услышать комментарии по поводу синтаксиса .Обязательно ли объявлять конструктор,типы пременных и функций? Работает все вроде и без этого.


Последний раз редактировалось iNils; 23.10.2006 в 17:26.
Старый 23.10.2006, 11:06
miramax вне форума Посмотреть профиль Отправить личное сообщение для miramax Посетить домашнюю страницу miramax Найти все сообщения от miramax
  № 2  
Ответить с цитированием
miramax
 
Аватар для miramax

Регистрация: Oct 2005
Адрес: Борисоглебск
Сообщений: 1,702
Отправить сообщение для miramax с помощью ICQ Отправить сообщение для miramax с помощью AIM Отправить сообщение для miramax с помощью MSN Отправить сообщение для miramax с помощью Yahoo Отправить сообщение для miramax с помощью Skype™
Цитата:
Сообщение от udaaff
class Movement {
Любой класс должен наследовать Object или потомка класса Object (собственно любой класс MovieClip, TextField, ScrollPane предопределённый в AS 2.0 наследуют Object)
Здесь пишем
Код:
class Movement extends Object{
Цитата:
function Movement() {
}
Да, функция конструктор необязательна. Если ты вообще не планируешь использовать функцию конструктор, то не пиши её вовсе. У тебя будет просто класс со с татическими членами. Этот класс и его методы можно использовать глобально в любом объекте без объявления, как например класс Math. Функция конструктор нужна для создания независимого экземпляра класса. Ты можешь изменять переменные внутри экземпляров класса независимо друг от друга
Цитата:
static function moveBehindTheMouse(mc:MovieClip, dl:Number):Void {
mc.onEnterFrame = function() {
this._x += (_xmouse - mc._x) * dl;
this._y += (_ymouse - mc._y) * dl;
};
}
Если ты понимаешь разницу между статическими членами класса и не статическими - то это тебе решать когда какие использовать.
__________________
AS3 | www.FLAPS.ru | Русские флэшеры самые умные флэшеры в мире. ©


Последний раз редактировалось miramax; 23.10.2006 в 11:09.
Старый 23.10.2006, 11:26
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 3  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,784
Название метода «moveBehindTheMouse» с точки зрения английского языка неверно.

Свойств _xmouse, _ymouse в классе Movement не существует.
Вот так написал бы я (может быть и иначе, но в контексте данной задачи):
Код:
import mx.utils.Delegate;
class Movement {

    private var target:MovieClip;
    private var dl:Number;

    public function Movement() {
        // пусто, инициализировать пока нечего
    }

    private function __followHandler():Void {
        var x:Number = this.target._x;
        var y:Number = this.target._y;
        var xmouse:Number = this.target._parent._xmouse;
        var ymouse:Number = this.target._parent._ymouse;
        x += (xmouse-x)/this.dl;
        y += (ymouse-y)/this.dl;
        this.target._x = x;
        this.target._y = y;
    }

    public function followTheMouse(mc:MovieClip, dl:Number):Void {
        this.target = mc;
        this.dl = dl;
        this.target.onEnterFrame = Delegate.create(this,this.__followHandler);
    }

    public function stopFollow():Void {
        delete this.target.onEnterFrame;
        delete this.target;
        delete this.dl;
    }
}
usage:
Код:
mover = new Moviement();
mover.followTheMouse(my_mc,3);
…
mover.stopFollow();
Подробнее расскажу позже, сейчас нужно бежать на работу.

з.Ы. miramax, любой класс является наследником Object, поэтому явно указывать на то, что это Object не нужно.

Старый 23.10.2006, 12:15
miramax вне форума Посмотреть профиль Отправить личное сообщение для miramax Посетить домашнюю страницу miramax Найти все сообщения от miramax
  № 4  
Ответить с цитированием
miramax
 
Аватар для miramax

Регистрация: Oct 2005
Адрес: Борисоглебск
Сообщений: 1,702
Отправить сообщение для miramax с помощью ICQ Отправить сообщение для miramax с помощью AIM Отправить сообщение для miramax с помощью MSN Отправить сообщение для miramax с помощью Yahoo Отправить сообщение для miramax с помощью Skype™
To __etc далеко не все компилляторы различных языков программирования вставляют за человека наследование по умолчанию (ситуация с метаклассами). То что в AS нужно писать extends Object это правило хорошего стиля, не меннее важное чем название класса с большой буквы.
To udaaff Если ты юзаешь this._x то тебе просто необходимо наследовать MovieClip и не пользоваться статическими переменными и функциями. Вообще инструкция this не работает внутри статической функции.
Так же в записи
Код:
 
class Movement extends Object{
   public static function f():void
   {
      trace(this._x)
   }
}
есть ещё одна ошибка, в классе Object свойство _x не определено. Необходимо наследовать MovieClip
__________________
AS3 | www.FLAPS.ru | Русские флэшеры самые умные флэшеры в мире. ©


Последний раз редактировалось miramax; 23.10.2006 в 12:45.
Старый 23.10.2006, 13:26
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 5  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,784
Цитата:
Сообщение от miramax
To __etc далеко не все компилляторы различных языков программирования вставляют за человека наследование по умолчанию
Ок, предположим, первое — что любой класс не является Object, если он его не расширяет. Тогда чем он является? String? Или, быть может, Number?

Второе — в твоём случае нужно вызывать конструктор супер-класса. Однако никакого упоминания об этом я не вижу.

AS — язык объектный, любой класс является объектом и писать «extends Object» — масло масляное, не говоря уже о том, что сбивает с толку. Компилятор (точнее конвертер в байт-код) не добавляет никаких «extends Object» и правильно делает. Это скорее лишнее действие, которое абсолютно не нужно (не говоря уже о том, что это не правило хорошего стиля, а просто «памятка» автору, что каждый класс — объект), в отличие от именования классов с прописной буквы.

з.Ы. miramax, this внутри onEnterFrame ссылается на мувик, поэтому this там необходим, несмотря на то, что написано в стат. функции. С другой стороны, это является стилем AS1, но это уже другая история.


Последний раз редактировалось etc; 23.10.2006 в 13:29.
Создать новую тему Ответ Часовой пояс GMT +4, время: 19:10.
Быстрый переход
  « Предыдущая тема | Следующая тема »  
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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