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

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

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

Регистрация: Jun 2010
Сообщений: 97
По умолчанию Поворот объекта кликами по кнопке.

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

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

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

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

блогер
Регистрация: Apr 2008
Адрес: SPb
Сообщений: 3,718
Записей в блоге: 5
Отправить сообщение для dark256 с помощью ICQ Отправить сообщение для dark256 с помощью Skype™
Опубликуйте оформленный тегами код
__________________
FLASHER.MAP SOUNDSTAGE / CS3 / AS2

Старый 02.01.2011, 05:48
U4enik вне форума Посмотреть профиль Отправить личное сообщение для U4enik Найти все сообщения от U4enik
  № 3  
Ответить с цитированием
U4enik

Регистрация: Jun 2010
Сообщений: 97
Код 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";
									       }
									  } 
 	 }
   }


Последний раз редактировалось U4enik; 02.01.2011 в 05:50.
Старый 02.01.2011, 07:55
rainbowrussia вне форума Посмотреть профиль Отправить личное сообщение для rainbowrussia Найти все сообщения от rainbowrussia
  № 4  
Ответить с цитированием
rainbowrussia
 
Аватар для rainbowrussia

Регистрация: Feb 2008
Сообщений: 560
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;
}


Последний раз редактировалось rainbowrussia; 02.01.2011 в 08:54.
Старый 02.01.2011, 16:45
U4enik вне форума Посмотреть профиль Отправить личное сообщение для U4enik Найти все сообщения от U4enik
  № 5  
Ответить с цитированием
U4enik

Регистрация: Jun 2010
Сообщений: 97
Цитата:
Сообщение от rainbowrussia Посмотреть сообщение
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:34.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

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

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


 


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


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