Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Вращение вокруг своей оси (http://www.flasher.ru/forum/showthread.php?t=165159)

DarkKnight2009 20.08.2011 20:40

Вращение вокруг своей оси
 
Есть код
Код AS3:

var angle:Number = 0;
var angleChange:Number = 10; // speed
 
var radius:Number = 100;
 
var centerX:Number = stage.stageWidth / 2;
var centerY:Number = stage.stageHeight / 2;
 
var satellite:MovieClip = new Asteroid();
satellite.x = stage.stageWidth / 2;
satellite.y = stage.stageHeight / 2;
addChild(satellite);
 
addEventListener(Event.ENTER_FRAME, onLoop, false, 0, true);
function onLoop(evt:Event):void
{
        var radian:Number = deg2rad(angle);
        satellite.x = centerX + radius * Math.cos(radian);
        satellite.y = centerY + radius * Math.sin(radian)
        angle += angleChange;
        angle %= 360;
        if(angle == 0)
                angleChange = 0;
}
 
function deg2rad(deg:Number):Number {
        return deg * (Math.PI/180)
}

В данное случае объект вращается относительно центра сцены.
Подскажите пожалуйста, как сделать, чтоб объект вращался относительно своего центра(точка регистрации находитсяв центре).
Спасибо

КорДум 20.08.2011 20:43

Код AS3:

var centerX:Number = obj.x - obj.width / 2;
var centerY:Number = obj.y - obj.height / 2;


DarkKnight2009 20.08.2011 20:46

Цитата:

Сообщение от КорДум (Сообщение 1023739)
Код AS3:

var centerX:Number = obj.x - obj.width / 2;
var centerY:Number = obj.y - obj.height / 2;


Вот я заменил код
Код AS3:

var angle:Number = 0;
var angleChange:Number = 10; // speed
 
var radius:Number = 100;
 
var satellite:MovieClip = new Asteroid();
satellite.x = stage.stageWidth / 2;
satellite.y = stage.stageHeight / 2;
addChild(satellite);
 
var centerX:Number = satellite.x - satellite.width / 2;
var centerY:Number = satellite.y - satellite.height / 2;
 
 
addEventListener(Event.ENTER_FRAME, onLoop, false, 0, true);
function onLoop(evt:Event):void
{
        var radian:Number = deg2rad(angle);
        satellite.x = centerX + radius * Math.cos(radian);
        satellite.y = centerY + radius * Math.sin(radian)
        angle += angleChange;
        angle %= 360;
        if(angle == 0)
                angleChange = 0;
}
 
function deg2rad(deg:Number):Number {
        return deg * (Math.PI/180)
}

Но результат остался прежний :(

КорДум 20.08.2011 20:51

А, не заметил. Точка регистрации в центре. Тогда вместо centerX нужно obj.x.

DarkKnight2009 20.08.2011 20:59

Цитата:

Сообщение от КорДум (Сообщение 1023741)
А, не заметил. Точка регистрации в центре. Тогда вместо centerX нужно obj.x.

Извините, может, я что-то не так меняю
Код AS3:

var angle:Number = 0;
var angleChange:Number = 10; // speed
 
var radius:Number = 100;
 
var satellite:MovieClip = new Asteroid();
satellite.x = stage.stageWidth / 2;
satellite.y = stage.stageHeight / 2;
addChild(satellite);
 
var centerX:Number = satellite.x - satellite.width / 2;
var centerY:Number = satellite.y - satellite.height / 2;
 
 
addEventListener(Event.ENTER_FRAME, onLoop, false, 0, true);
function onLoop(evt:Event):void
{
        var radian:Number = deg2rad(angle);
        satellite.x = satellite.x + radius * Math.cos(radian);
        satellite.y = satellite.y + radius * Math.sin(radian)
        angle += angleChange;
        angle %= 360;
        if(angle == 0)
                angleChange = 0;
}
 
function deg2rad(deg:Number):Number {
        return deg * (Math.PI/180)
}

Но сейчас вообще не то получилось, объект, куда-то улетает :(

КорДум 20.08.2011 21:03

Нет, Вы должны сначала запомнить координаты объекта. А затем их поставлять в формулу. Иначе координаты будут постоянно меняться, что Вы и получаете.

DarkKnight2009 20.08.2011 21:08

Цитата:

Сообщение от КорДум (Сообщение 1023743)
Нет, Вы должны сначала запомнить координаты объекта. А затем их поставлять в формулу. Иначе координаты будут постоянно меняться, что Вы и получаете.

Пожалуйста, напишите, что я делаю не так.
я пишу
Код AS3:

var angle:Number = 0;
var angleChange:Number = 10; // speed
 
var radius:Number = 100;
 
var satellite:MovieClip = new Asteroid();
satellite.x = stage.stageWidth / 2;
satellite.y = stage.stageHeight / 2;
addChild(satellite);
 
var satelliteX:Number = satellite.x - satellite.width / 2;
var satelliteY:Number = satellite.y - satellite.height / 2;
 
 
addEventListener(Event.ENTER_FRAME, onLoop, false, 0, true);
function onLoop(evt:Event):void
{
        var radian:Number = deg2rad(angle);
 
        satelliteX = satelliteX + radius * Math.cos(radian);
        satelliteY = satelliteY + radius * Math.sin(radian)
        angle += angleChange;
        angle %= 360;
        if(angle == 0)
                angleChange = 0;
}
 
function deg2rad(deg:Number):Number {
        return deg * (Math.PI/180)
}

объект вообще не жвижется
:(

КорДум 20.08.2011 21:09

о___О
Код AS3:

satelliteX = satelliteX + radius * Math.cos(radian);
satelliteY = satelliteY + radius * Math.sin(radian)

А ГДЕ Вы его тут двигаете?
Код AS3:

obj.x = satelliteX + radius * Math.cos(radian);
obj.y = satelliteY + radius * Math.sin(radian)

Добавлено через 3 минуты
Что-то Вы все напутали.
Код AS3:

// запоминаем координаты
var centerX:int = obj.x;
var centerY:int = obj.y;
...
// двигаем:
obj.x = centerX+ radius * Math.cos(radian);
obj.y = centerY+ radius * Math.sin(radian);


DarkKnight2009 20.08.2011 21:13

Цитата:

Сообщение от КорДум (Сообщение 1023747)
о___О
Код AS3:

satelliteX = satelliteX + radius * Math.cos(radian);
satelliteY = satelliteY + radius * Math.sin(radian)

А ГДЕ Вы его тут двигаете?
Код AS3:

obj.x = satelliteX + radius * Math.cos(radian);
obj.y = satelliteY + radius * Math.sin(radian)


Да ,вот же, я все поменял, но результат прежний
Код AS3:

var angle:Number = 0;
var angleChange:Number = 10; // speed
 
var radius:Number = 100;
 
var satellite:MovieClip = new Asteroid();
satellite.x = stage.stageWidth / 2;
satellite.y = stage.stageHeight / 2;
addChild(satellite);
 
var satelliteX:Number = satellite.x - satellite.width / 2;
var satelliteY:Number = satellite.y - satellite.height / 2;
 
 
addEventListener(Event.ENTER_FRAME, onLoop, false, 0, true);
function onLoop(evt:Event):void
{
        var radian:Number = deg2rad(angle);
 
        satellite.x = satelliteX + radius * Math.cos(radian);
        satellite.y = satelliteY + radius * Math.sin(radian)
        angle += angleChange;
        angle %= 360;
        if(angle == 0)
                angleChange = 0;
}
 
function deg2rad(deg:Number):Number {
        return deg * (Math.PI/180)
}

Объект крутится по-кругу, а не относительно своего центре :(

КорДум 20.08.2011 21:13

Стоять. А зачем Вы его вообще двигаете, если Вам его надо вращать? о__О


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

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