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

Вернуться   Форум Flasher.ru > Flash > ActionScript 1.0/2.0

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

Регистрация: Feb 2013
Сообщений: 51
По умолчанию проблема с this

есть клип cat, в нем создан экземпляр класса motion и вызвана функция motion1() которая должна перемещать клип
проблема в том что когда в классе в этой ф-ции написано this._x+=10 ; - клип стоит, когда пишу _root.cat._x+=10 клип двигается
как решить эту проблему? мне нужно this чтоб я мог вызывать эту ф-цию у любого клипа, а не писать ф-ции для каждого клипа
Код AS1/AS2:
	class motion extends MovieClip implements Motions
{   
 
 
	public function motion1()
	{
 
this._x+= speed;
 
 
 
 
	}
}
 
-----------
onClipEvent (enterFrame) {
 
 
var cats:motion = new motion(); 
 
cats.motion1();
 
}

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

блогер
Регистрация: Feb 2008
Адрес: Россия, Новосибирск, Академгородок
Сообщений: 2,113
Записей в блоге: 1
Отправить сообщение для Hauts с помощью ICQ Отправить сообщение для Hauts с помощью Skype™
Что-то вообще странное смешение классов и ас1 (onClipEvent (enterFrame)).

dimaMJ, попробуйте тогда без классов, но с кодом в кадрах. И вместо motion1, например, использовать твиннер.

О, кажется сообразил, что вы хотите сделать.

this указывает на экземпляр класса motion (классы лучше с большой буквы называть), а не на cat. Исправить можно так:

Код AS1/AS2:
class MotionController extends MovieClip implements Motions
{   
private var _owner:MovieClip;
private var _speed:Number;
public function MotionController( owner:MovieClip ){
    _owner = owner;
}
public function motionToRight(speed:Number){
    _speed = speed
    this.onEnterFrame = function(){
        this._owner._x+= _speed;
    }
}
}
//----------------
// В первом кадре клипа, который должен двигаться:
//
 
var motionController:MotionController = new MotionController(this);
motionController.motionToRight(10);
Хотя я не уверен. Что-то мне подсказывает, что не будет события onEnterFrame у экземпляра класса MotionController (кажется это решалось созданием пустого мувиклипа в _root`е, чтобы onEnterFrame ловил).

Вообще вы при каждом обновлении кадра создаете новый motion. Это неправильно.

Как дополнительный вариант можно сделать так:
Код AS1/AS2:
 
class Motions(){
    public static function moveRight(moveWhat:MovieClip, speed:Number){
        moveWhat._x += speed
    }
}
 
//-----------
someMovieClip.onEnterFrame = function(){
    Motions.moveRight(this, 10)
}
__________________
hauts.ru

Старый 08.02.2013, 11:44
udaaff вне форума Посмотреть профиль Отправить личное сообщение для udaaff Найти все сообщения от udaaff
  № 3  
Ответить с цитированием
udaaff
...

модератор форума
Регистрация: Sep 2006
Адрес: Minsk
Сообщений: 4,286
dimaMJ, а по-человечески тяжело код оформить?

Создать новую тему Ответ Часовой пояс GMT +4, время: 23:37.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

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

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


 


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


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