Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 11.08.2015, 16:39
Bazel вне форума Посмотреть профиль Отправить личное сообщение для Bazel Найти все сообщения от Bazel
  № 1  
Ответить с цитированием
Bazel
[+1 26.12.11]
[+1 11.09.11]

Регистрация: Feb 2011
Сообщений: 117
Проблема в следующем, что имеем 2 многоугольника, у одного скорость 0.5, у второго 1. На деле имеем что движутся они с одинаковой скоростью


код элементарный,

Код AS3:
public function MoveBody (object:DisplayObject, t : Number ):void // перемещаем центр спрайта не апдейтя его вершин
{
 
	trace("object.x0=",object.x);
	object.x+=Vx;
	trace("object.x1=",object.x);
}
везде типы Number почему округляется не пойму

вот свф
Вложения
Тип файла: swf rectangle.swf (15.8 Кб, 291 просмотров)


Последний раз редактировалось udaaff; 13.08.2015 в 19:33.
Старый 11.08.2015, 17:01
tattori вне форума Посмотреть профиль Отправить личное сообщение для tattori Найти все сообщения от tattori
  № 2  
Ответить с цитированием
tattori

Регистрация: Jul 2015
Сообщений: 73
я так понял Vx это и есть скорость, но не вижу в этом коде где это переменная определяется или изменяется что бы понять в чем дело, и для чего нужна переменная "t" ?

Добавлено через 35 секунд
может вместо Vx ты хотел написать именно t

Старый 11.08.2015, 17:03
Bazel вне форума Посмотреть профиль Отправить личное сообщение для Bazel Найти все сообщения от Bazel
  № 3  
Ответить с цитированием
Bazel
[+1 26.12.11]
[+1 11.09.11]

Регистрация: Feb 2011
Сообщений: 117
Да, Vx скорость, переменная t не нужна я удалил весь лишний код, чтобы максимально наглядно было, Vx постоянная

Старый 11.08.2015, 17:12
callme вне форума Посмотреть профиль Отправить личное сообщение для callme Найти все сообщения от callme
  № 4  
Ответить с цитированием
callme
 
Аватар для callme

Регистрация: Dec 2014
Сообщений: 312
Проблема не с этим кодом, а в другом месте.

Старый 11.08.2015, 17:17
Bazel вне форума Посмотреть профиль Отправить личное сообщение для Bazel Найти все сообщения от Bazel
  № 5  
Ответить с цитированием
Bazel
[+1 26.12.11]
[+1 11.09.11]

Регистрация: Feb 2011
Сообщений: 117
ммм, да вроде напортачить тут сложно. Просто вызываем функцию перемещения через некоторое время и все. И если скорость сделаем 1.5 и 1 тогда 1 многоугольник побежит быстрее а вот если 0.5 и 1 то оба движутся одинаково.

Старый 11.08.2015, 17:34
tattori вне форума Посмотреть профиль Отправить личное сообщение для tattori Найти все сообщения от tattori
  № 6  
Ответить с цитированием
tattori

Регистрация: Jul 2015
Сообщений: 73
так где ты указываешь скорость?

Добавлено через 1 минуту
если Vx постоянная то получается для всех одна и та же скорость будет

Старый 11.08.2015, 17:38
callme вне форума Посмотреть профиль Отправить личное сообщение для callme Найти все сообщения от callme
  № 7  
Ответить с цитированием
callme
 
Аватар для callme

Регистрация: Dec 2014
Сообщений: 312
Упрощайте свой код пока не найдёте ошибку.

Вот работающий пример, может поможет.
Код AS3:
package
{
    import flash.display.DisplayObject;
    import flash.display.Shape;
    import flash.display.Sprite;
    import flash.events.Event;
 
    public class Main extends Sprite
    {
        public function Main()
        {
            _shape1 = new Shape();
            _shape2 = new Shape();
 
            _shape1.graphics.beginFill(0);
            _shape1.graphics.drawRect(0, 0, 100, 100);
 
            _shape2.graphics.beginFill(0);
            _shape2.graphics.drawRect(0, 0, 100, 100);
            _shape2.y = 200;
 
            addChild(_shape1);
            addChild(_shape2);
 
            addEventListener(Event.ENTER_FRAME, enterFrame);
        }
 
        private function enterFrame(e:Event):void 
        {
            Vx = 0.5;
            moveBody(_shape1);
 
            Vx = 1;
            moveBody(_shape2);
        }
 
        private function moveBody(object:DisplayObject):void
        {
            object.x += Vx;
        }
 
        private var _shape1:Shape;
        private var _shape2:Shape;
 
        private var Vx:Number;
    }
}

Старый 11.08.2015, 17:38
tattori вне форума Посмотреть профиль Отправить личное сообщение для tattori Найти все сообщения от tattori
  № 8  
Ответить с цитированием
tattori

Регистрация: Jul 2015
Сообщений: 73
с этим кусочком кода сложно что либо сказать))

Старый 11.08.2015, 17:56
Bazel вне форума Посмотреть профиль Отправить личное сообщение для Bazel Найти все сообщения от Bazel
  № 9  
Ответить с цитированием
Bazel
[+1 26.12.11]
[+1 11.09.11]

Регистрация: Feb 2011
Сообщений: 117
мм сейчас буду рыться в своем коде. Решение отпишу если найду.
У меня 2 класса, в каждом хранятся свои скорости.

Добавлено через 12 минут
ошибка найдена ! т.к. у меня две функции вызываются, сначала сдвига а потом поворота.Я закомментил функцию поворота и все заработало как надо. Но теперь нужно подружить эти две функции

вот функция поворота

Код AS3:
public function pointRotate(object:DisplayObject, center:Point, angle:Number) : void
    {
        /* * * * * * * * * *
*                  *
*  @author wolsh   *
*                  *
\* * * * * * * * * */ 
 
        // return to zero
        angle += object.rotation;
        var a0:Number = - object.rotation * Math.PI / 180;
        var s0:Number = Math.sin(a0);
        var c0:Number = Math.cos(a0);
        var dX0:Number = object.x - center.x;
        var dY0:Number = object.y - center.y;
 
        object.rotation = 0;
        object.x = Math.round(center.x + dX0 * c0 - dY0 * s0);
        object.y = Math.round(center.y + dX0 * s0 + dY0 * c0);
 
        // new rotation
        var r:Number = angle * Math.PI / 180;
        var s:Number = Math.sin(r);
        var c:Number = Math.cos(r);
        var dX:Number = object.x - center.x;
        var dY:Number = object.y - center.y;
 
        object.rotation += angle;
        object.x = center.x + dX * c - dY * s;
        object.y = center.y + dX * s + dY * c;
    }
Добавлено через 34 минуты
поясню в чем суть проблемы. У нас 2 многоугольника ударяются друг об друга. Все замечательно, все обсчитывается правильно, но просто спрайт съзжает с вершин к которым прикреплен при малых скоростях.

вот наглядно показывает это, подождите секунд 30 и увидите где вершины а где сам спрайт

мне нужно чтобы спрайт вращался и перемещался адекватно.

банально и просто, вращаться он может. Перемещаться тоже при малой скорости. А вот вместе повернуться и переместиться у него не получается нормально.
Вложения
Тип файла: swf rectangle.swf (15.9 Кб, 30 просмотров)


Последний раз редактировалось udaaff; 13.08.2015 в 19:32.
Создать новую тему Ответ Часовой пояс GMT +4, время: 09:58.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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