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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 27.01.2016, 18:16
Vlad84 вне форума Посмотреть профиль Отправить личное сообщение для Vlad84 Найти все сообщения от Vlad84
  № 1  
Ответить с цитированием
Vlad84

Регистрация: Jul 2012
Сообщений: 148
По умолчанию Неправильный расчет движения

По задумке, красный шар должен лететь по заданному вектору и попасть в зеленый круг. Но он бесстыдно косит, по чуть-чуть при любом векторе. В чем ошибка?

Код AS3:
var r:Number = 150;
 
var angle:Number = 0;
 
var vx:Number = 1;
var vy:Number = 0.5;
 
var px:Number = 0;
var py:Number = 0;
 
addEventListener(Event.ENTER_FRAME, update);
function update(e:Event):void {
 
	ball_mc.x += vx;
	ball_mc.y += vy;
 
	// Точка, в которую летит шар
	angle = Math.atan2(vy, vx);
	px = circle_mc.x + r * Math.cos(angle);
	py = circle_mc.y + r * Math.sin(angle);
	point_mc.x = px;
	point_mc.y = py;
 
}
Изображения
 

Старый 28.01.2016, 10:57
Zebestov вне форума Посмотреть профиль Отправить личное сообщение для Zebestov Посетить домашнюю страницу Zebestov Найти все сообщения от Zebestov
  № 2  
Ответить с цитированием
Zebestov
Lorem ipsum
 
Аватар для Zebestov

модератор форума
Регистрация: May 2001
Адрес: Одесса
Сообщений: 4,869
Записей в блоге: 4
Что будет, если заменить эти строки
Код AS3:
ball_mc.x += vx;
ball_mc.y += vy;
на эти
Код AS3:
ball_mc.x = circle_mc.x + vx / Math.sqrt(vx*vx + vy*vy) * r;
ball_mc.y = circle_mc.y + vy / Math.sqrt(vx*vx + vy*vy) * r;
По идее красный шарик должен оказаться ровно под зеленым.
Если этого не произошло — что-то вообще сильно не так.
Если это произошло, то есть два варианта:
1. накапливается погрешность, связанная с тем, что координаты экранных объектов округляются до 1/20; это одна из причин, по которым рекомендуется отделять логику от отображения — если бы ты хранил координату в некой переменной, значение которой уже потом присваивал бы соотв. координате экранного объекта, этой проблемы не было бы;
2. ты забыл в самом начале задать стартовые координаты своему красному шару равные координатам центра твоего черного круга-орбиты (ну, я же не знаю, где у тебя этот центр, может не в нуле);
__________________
Поймай яблоко 2!

Старый 28.01.2016, 12:29
Vlad84 вне форума Посмотреть профиль Отправить личное сообщение для Vlad84 Найти все сообщения от Vlad84
  № 3  
Ответить с цитированием
Vlad84

Регистрация: Jul 2012
Сообщений: 148
Zebestov, спасибо за проверку. Нашел ошибку. Я считаю вектор, идущий из центра circle_mc, а в тесте ball_mc у меня изначально стоит чуть в стороне от центра, отсюда и эта погрешность

Создать новую тему Ответ Часовой пояс GMT +4, время: 17:40.
Быстрый переход
  « Предыдущая тема | Следующая тема »  
Опции темы
Опции просмотра

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

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


 


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


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