PDA

Просмотр полной версии : Поворот объекта кликами по кнопке.


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

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

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

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

U4enik
02.01.2011, 05:48
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;
}

U4enik
02.01.2011, 16:45
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 :)