Вращающийся спрайт перемещает спрайт из исходного положения - PullRequest
2 голосов
/ 06 июля 2011

Я делаю простой поворот на спрайте, но есть странное поведение, когда спрайт не вращается вокруг своей верхней левой части.Я думаю, что я вращаюсь вдоль левого верхнего угла тестового класса вместо дочернего спрайта.Я хотел бы повернуть прямоугольник вокруг его верхнего левого угла (вроде стрелки часов).Код довольно короткий, поэтому я позволю коду + рисункам объяснить мою проблему:

package
{
    import flash.display.Sprite;

    public class test extends Sprite
    {
        public function test()
        {
            var mySprite:Sprite = new Sprite();
            mySprite.graphics.beginFill(0x000000);
            mySprite.graphics.drawRect(100,100,6,120);
            mySprite.graphics.endFill();
            this.addChild(mySprite);
            mySprite.rotation = 45;
        }

    }
}

Кажется, слишком просто облажаться, вот результаты.Красная линия находится над ключом дома для справки.Сначала я установил mySprite.rotation=0, а второй - код, показанный выше: http://i56.tinypic.com/a4vi4h.png

enter image description here

Я много чего читал о вращении вокруг фиксированной точки, яя попробовал сделать это с мувиклипами вместо спрайтов, я даже скопировал и вставил учебник по вращению , и ничего не работает.Почему такое поведение происходит и как я могу это исправить?

Редактировать: Спасибо всем, все ваши предложения помогли мне по-разному, и все они были правильными, так что +1, я просто выберу решение, которое я выбралиспользовать в моем коде.

Ответы [ 3 ]

3 голосов
/ 06 июля 2011

Если вы хотите повернуть его из центра, попробуйте что-то вроде:

var mySprite:Sprite = new Sprite();
mySprite.x = mySprite.y = 100;
mySprite.graphics.beginFill(0x000000);
mySprite.graphics.drawRect(-3,-60,6,120);
mySprite.graphics.endFill();
this.addChild(mySprite);
mySprite.rotation = 45;
1 голос
/ 06 июля 2011

Вы вращаете прямоугольник вокруг точки регистрации mySprites, которая совпадает с ее координатами x / y (в настоящее время установлено значение 0,0). Вы можете нарисовать прямоугольник и затем переместить его в правильное положение, установив спрайты xy.

var mySprite:Sprite = new Sprite();
mySprite.graphics.beginFill(0x000000);
mySprite.graphics.drawRect(-3, -60, 6, 120);
mySprite.graphics.endFill();
mySprite.x = 100;
mySprite.y = 100;
addChild(mySprite);
mySprite.rotation = 45;

Это должно работать. Чтобы увидеть, как возникла проблема, скомпилируйте приведенный ниже код, и вы увидите движение исходного бара.

for (var i:int = 0; i <= 45; i+=5) {
     var mySprite:Sprite = new Sprite();
     mySprite.graphics.beginFill(0x000000,0.5);
     mySprite.graphics.drawRect(100, 100, 6, 120);
     mySprite.graphics.endFill();
     addChild(mySprite);
     mySprite.rotation = i;
}
1 голос
/ 06 июля 2011

Спрайт вращается вокруг своего верхнего левого угла, но у вас нет никакой графики в верхнем левом углу.Бар отображается в (100, 100).Попробуйте это:

var mySprite:Sprite = new Sprite();
mySprite.graphics.beginFill(0x000000);
mySprite.graphics.drawRect(0,0,6,120); // render in 0, 0
mySprite.graphics.endFill();
mySprite.x = 100; // move it 
mySprite.y = 100;
this.addChild(mySprite);
mySprite.rotation = 45;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...