Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   Поворот объекта кликами по кнопке. (http://www.flasher.ru/forum/showthread.php?t=148459)

U4enik 02.01.2011 01:27

Поворот объекта кликами по кнопке.
 
Помогите пожалуйста разобраться, не могу справиться с задачей . Есть оъект и кнопка, при нажатии на кнопку объект должен поворачиваться 90 градусов. Тоесть за 4 клика по кнопке объект должен сделать оборот на 360 градусов.

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

Подскажите в чем может быть проблема?

dark256 02.01.2011 02:10

Опубликуйте оформленный тегами код :)

U4enik 02.01.2011 05:48

Код AS1/AS2:

var faza = "1";
 knopka.onRelease = function(){
 
  switch (faza){
        case "1": clip.onEnterFrame = function(){
                          clip._rotation+=5;
                      clip.updateAfterEvent();
                      if(clip._rotation >= 90) {delete clip.onEnterFrame;
                                                      faza = "2";
                                                                                    }
                                                                                }
        break;
        case "2": clip.onEnterFrame = function(){
                      clip._rotation+=5;
                      clip.updateAfterEvent();
                      if(clip._rotation >= 180) {
                                                          delete clip.onEnterFrame;
                                                          faza = "3";
                                                                            }
                                                                        }
        break;
        case "3": clip.onEnterFrame = function(){
                      clip._rotation+=5;
                      clip.updateAfterEvent();
                      if(clip._rotation >= 270) {delete clip.onEnterFrame;
                                                        faza = "4";
                                                                              }
                                                                        }
    break;
        case "4": clip.onEnterFrame = function(){
                      clip._rotation+=5;
                      clip.updateAfterEvent();
                      if(clip._rotation >= 360) {delete clip.onEnterFrame;
                                                                            faza = "1";
                                                                              }
                                                                          }
          }
  }


rainbowrussia 02.01.2011 07:55

clip._rotation не принимает значения больше 180. Замените:
clip._rotation >= 270 на clip._rotation >= -90
clip._rotation >= 360 на clip._rotation == 0

Либо введите переменную, cur_rotation и плюсуйте и сравнивайте ее.

Например:
Код AS1/AS2:

var cangle = 0;
var angle = 0;
knopka.onRelease = function () {
        angle += 90;
        clip.onEnterFrame = oef;
}
 
function oef() {
        if (cangle >= angle) {
                delete(this.onEnterFrame);
        } else {
                cangle += 5;
                clip._rotation = cangle;
        }
}

Если нужно во время выполнения вращения блокировать нажатия на кнопку, то вот:
Код AS1/AS2:

var cangle = 0;
var angle = 0;
knopka.onRelease = function () {
        if (!clip.onEnterFrame) {
                angle += 90;
                clip.onEnterFrame = oef;
        }
}
 
function oef() {
        if (cangle >= angle) {
                delete(this.onEnterFrame);
        } else {
                cangle += 5;
                clip._rotation = cangle;
        }
}

ps. Вариант с блокировкой, с одной переменной и однострочными функциями:
Код AS1/AS2:

var angle = 0;
 
knopka.onRelease = function () {
        clip.onEnterFrame = angle || (angle += 90) ? oef : oef;
}
 
function oef() {
        this._rotation += angle ? 5 + 0 * (angle -= 5) : 0 * delete this.onEnterFrame;
}


U4enik 02.01.2011 16:45

Цитата:

Сообщение от rainbowrussia (Сообщение 961477)
clip._rotation не принимает значения больше 180. Замените:
clip._rotation >= 270 на clip._rotation >= -90
clip._rotation >= 360 на clip._rotation == 0

Либо введите переменную, cur_rotation и плюсуйте и сравнивайте ее.

Например:
Код AS1/AS2:

var cangle = 0;
var angle = 0;
knopka.onRelease = function () {
        angle += 90;
        clip.onEnterFrame = oef;
}
 
function oef() {
        if (cangle >= angle) {
                delete(this.onEnterFrame);
        } else {
                cangle += 5;
                clip._rotation = cangle;
        }
}

Если нужно во время выполнения вращения блокировать нажатия на кнопку, то вот:
Код AS1/AS2:

var cangle = 0;
var angle = 0;
knopka.onRelease = function () {
        if (!clip.onEnterFrame) {
                angle += 90;
                clip.onEnterFrame = oef;
        }
}
 
function oef() {
        if (cangle >= angle) {
                delete(this.onEnterFrame);
        } else {
                cangle += 5;
                clip._rotation = cangle;
        }
}

ps. Вариант с блокировкой, с одной переменной и однострочными функциями:
Код AS1/AS2:

var angle = 0;
 
knopka.onRelease = function () {
        clip.onEnterFrame = angle || (angle += 90) ? oef : oef;
}
 
function oef() {
        this._rotation += angle ? 5 + 0 * (angle -= 5) : 0 * delete this.onEnterFrame;
}


Спасибо за помощь. Теперь все ок. Просто я почему-то не знал что _rotation не принимает значения больше 180 :)


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

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