Просмотр полной версии : Поворот объекта кликами по кнопке.
Помогите пожалуйста разобраться, не могу справиться с задачей . Есть оъект и кнопка, при нажатии на кнопку объект должен поворачиваться 90 градусов. Тоесть за 4 клика по кнопке объект должен сделать оборот на 360 градусов.
У меня поворачивается только на 180 градусов, а при следующем клике крутиться уже безостановочно.
Подскажите в чем может быть проблема?
Опубликуйте оформленный тегами код :)
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 и плюсуйте и сравнивайте ее.
Например:
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;
}
}
Если нужно во время выполнения вращения блокировать нажатия на кнопку, то вот:
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. Вариант с блокировкой, с одной переменной и однострочными функциями:
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;
}
clip._rotation не принимает значения больше 180. Замените:
clip._rotation >= 270 на clip._rotation >= -90
clip._rotation >= 360 на clip._rotation == 0
Либо введите переменную, cur_rotation и плюсуйте и сравнивайте ее.
Например:
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;
}
}
Если нужно во время выполнения вращения блокировать нажатия на кнопку, то вот:
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. Вариант с блокировкой, с одной переменной и однострочными функциями:
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 :)
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.