Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   bitmapdata положение точки поворота (http://www.flasher.ru/forum/showthread.php?t=169280)

bookin 02.10.2011 00:24

bitmapdata положение точки поворота
 
можно ли указать в bitmapdata место положение точки относительно которой объект поворачивает и позиционируется на сцене ?

Wolsh 02.10.2011 02:19

BitmapData это массив чисел. Он как бы не позиционируется на сцене, поскольку не может на ней оказаться.
С "объект поворачивает" и "место положение точки" в подразумеваемом Вами контексте ситуация аналогичная. Массив это не визуальный объект.

bookin 02.10.2011 02:29

эмм ну я же могу задавать этому мосиву чисел при draw позиционирование, я чевот походу не догоняю)

fish_r 02.10.2011 02:45

Чевот не догоняете :), Можно изменить точку регистрации (а это так называется ) у DisplayObject-а (Sprite, MovieClip, Shape, Bitmap etc.) переопределив, например, акцессоры (get и set) x,y этого объекта.
Еще может быть полезно (если это как-то связанно с вращением) будет вот это почитать: http://www.flasher.ru/forum/blog.php?b=378.

bookin 03.10.2011 12:40

fish_r, спасибо за ссылку на статью но пишу на as3 и так понимаю там нет метода rotateAroundInternalPoint
ну либо я совсем дибил =)
проблема именна с врашением, точнее координатами обьект при вращении, имеется обект ось(точка регистрации) находится грубо говоря в центре обьекта, и создается bitmap у которого данная точка становится в 0,0 обьекта, позиционирование и поворот дублируется из первого обьекта, и при повороте копия смешается, потому появилась потребность сместить данную точку так же как в первом обьекте

Wolsh 03.10.2011 14:00

Сделайте пустой спрайт, положите туда битмап и сдвиньте его в спрайте на половину ширины и половину высоты влево вверх (в отрицательные координаты) – чтобы центр битмапа приходился на (0, 0) спрайта. И дальше обращайтесь со спрайтом так, как будто у него точка регистрации в центре. Задать ТР программно в том же смысле, как "руками" в ИДЕ не получится. Только так или тригонометрическими рассчетами, смещая битмап после поворота. Сто раз обсуждалось.

derhab 03.10.2011 14:06

Цитата:

Сообщение от bookin (Сообщение 1036324)
fish_r, спасибо за ссылку на статью но пишу на as3 и так понимаю там нет метода rotateAroundInternalPoint
ну либо я совсем дибил =)

метод есть:)

bookin 03.10.2011 14:07

Вложений: 1
прикрепил пример того что натворил, может кто тыкнет носом де я лох,

а по поводу сто раз обсуждалось можно линку если не сложно

SvetozarPNZ 03.10.2011 17:11

Цитата:

Сообщение от Wolsh (Сообщение 1036347)
или тригонометрическими рассчетами, смещая битмап после поворота.

Кстати, тригонометрический расчет - это костыльный способ? Можно им пользоваться желающим стать труфлешерами? :)

Wolsh 03.10.2011 18:08

Костыльный – это дополнительный контейнер. Вот он да, именно костыль. А тригонометрические рассчеты это единственный вариант решения, будете Вы использовать Матрицы или двигать "ручками" х и у – синусы и косинусы все-равно считать.

bookin 03.10.2011 18:12

сработало вот в таком виде

Код AS3:

while (i--) {
                var curB = boxes[i];
                bmpCar.fillRect(bmpCar.rect, 0);
 
          var myBox : Shape = new Shape();
            myBox.graphics.lineStyle(1, 0x000000);
            myBox.graphics.beginFill(0x000000);
            myBox.graphics.drawRect(16, 16, 32, 32);
            myBox.graphics.endFill();
 
            var myMatrix : Matrix = myBox.transform.matrix;
            var axisPoint : Point = new Point(car.carBody.width/4, car.carBody.height/2);
            var newPoint : Point = myMatrix.transformPoint(axisPoint);
 
                        myMatrix.translate(-axisPoint.x, -axisPoint.y);
                        myMatrix.rotate(car.rotation*(3.14/180));
                        myMatrix.translate(car.x, car.y);
 
                        bmpCar.draw(car.carBody, myMatrix);
 
 
                        if (bmpCar.hitTest(new Point(), 255, curB, new Point(), 255)) {
                                //trace('yra'+Math.random()*5);
                                speed =2;
                        }
        }

к сожалению так и не разобрался =(

fish_r 03.10.2011 18:25

Цитата:

Сообщение от bookin (Сообщение 1036324)
fish_r, спасибо за ссылку на статью но пишу на as3 и так понимаю там нет метода rotateAroundInternalPoint
ну либо я совсем дибил =)
проблема именна с врашением, точнее координатами обьект при вращении, имеется обект ось(точка регистрации) находится грубо говоря в центре обьекта, и создается bitmap у которого данная точка становится в 0,0 обьекта, позиционирование и поворот дублируется из первого обьекта, и при повороте копия смешается, потому появилась потребность сместить данную точку так же как в первом обьекте

Раз вы компилите в ИДЕ 5.5, то точно есть, этот класс поставляется только с Flash IDE. По ссылке, кстати,
речь и идёт про as3 :)

По вашей задаче. Можно оба объекта поместить (можно временно, на время выполнения) в общий для них контейнер, контейнер повернуть нужным образом, затем вынуть объекты из контейнера, предварительно преобразовав их локальные координаты в глобальные, затем переразместить эти элементы уже вне контейнера. См. 1 пункт по ссылке которую я дал выше, это простейший вариант.


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

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