Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Странности as3. super.x vs this.x (http://www.flasher.ru/forum/showthread.php?t=211614)

caseyryan 02.10.2015 07:39

Странности as3. super.x vs this.x
 
Сегодня наткнулся на одну непонятную штуку
Есть запись
Код AS3:

super.x += (_physBody.position.x - super.x) / 3;
super.y += (_physBody.position.y - super.y) / 3;

На этом месте компилятор кидает ошибки
Цитата:

Error #1086: Syntax error: expecting semicolon before plusassign.
Error #1086: Syntax error: expecting semicolon before plusassign.
Если заменить запись на такую
Код AS3:

this.x += (_physBody.position.x - super.x) / 3;
this.y += (_physBody.position.y - super.y) / 3;

Ошибка исчезает.
Такая запись
Код AS3:

super.x = (_physBody.position.x - super.x) / 3;
super.y = (_physBody.position.y - super.y) / 3;

Тоже не выдает ошибок и нормально компилируется.
Как так? Оо

п.с. все это происходит в наследнике спрайта, и super.x имеет как геттер, так и сеттер. Никаких ошибок и пропущеных точки с запятой или фигурных скобок нет, уже все на сто раз перепроверил. Всё на своих местах

Проблему я решил простым способом
Код AS3:

super.x = super.x + (_physBody.position.x - super.x) / 3;
super.y = super.y + (_physBody.position.y - super.y) / 3;

Но меня интересует природа этого бага. Может кто-то сталкивался и докопался до истины?

udaaff 02.10.2015 10:08

Это древний баг. Приходится обходится без +=, ну или без super.

caseyryan 02.10.2015 11:11

тут без super никак)

Zebestov 02.10.2015 11:43

У меня такое было только один раз в жизни, когда я в одном файле два спрайта описывал. Так вот во втором как раз на += и гавкало.

caseyryan 02.10.2015 11:44

Два спрайта в одном файле? Это как?
Вложенный класс?

Zebestov 02.10.2015 11:46

Ну да, два класса описывал в одном файле.

caseyryan 02.10.2015 11:58

У меня там тоже вложенный.. Убрал, но ничего не поменялось

AlexCooper 03.10.2015 05:12

Цитата:

Сообщение от caseyryan (Сообщение 1187549)
тут без super никак)

Через геттер для супер пробывали?

caseyryan 03.10.2015 09:35

Цитата:

Через геттер для супер пробывали?
Зачем мне это? Меня интересовала сама природа этого бага. А как обрулить то я сразу и так знал

Bletraut 03.10.2015 09:55

Цитата:

Сообщение от caseyryan (Сообщение 1187549)
тут без super никак)

А если не секрет, то почему никак? Просто интересно где такое может понадобиться.

caseyryan 03.10.2015 10:39

Потому что там вот так:
Код AS3:

override public function set x(value:Number):void {
        _physBody.position.x = value;
        super.x = value;
}

А чтобы сдвинуть картинку без перемещения физического тела, надо дернуть просто super.x
Картинку там для разных эффектов надо иногда двигать отдельно от физического тела. Например для прыжка или для стабилизации вибраций

Zebestov 03.10.2015 10:45

А ты геттер тоже переопределил? Ну это так, на уровне шаманства какого-то.

caseyryan 03.10.2015 11:03

По-моему вполне нормальная практика. Геттер у меня возвращает положение физического тела

Zebestov 03.10.2015 12:46

Тады ой ©
Странно все это.


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

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