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

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

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

Регистрация: Jun 2011
Сообщений: 3
Question Тригонометрическая фигня

Или я полностью флэш не понимаю(недавно начал осваивать), или я тупой, но как у меня получается отрицательный синус из положительного угла?
Мне просто нужно создать шарик почти на краю пушки
Код AS3:
import flash.events.Event;
import flash.events.MouseEvent;
stop();
var angle:Number = 0;
var AB:Number = 0;
var BC:Number = 0;
var i:uint = 0;
Mouse.hide();
gun.nextFrame();
function mcursor (event:Event)
{
	cursor.x = mouseX;
	cursor.y = mouseY;
	if ((mouseX > gun.x)&&(mouseY < gun.y))
	{
		AB = Math.sqrt((mouseX - gun.x)*(mouseX - gun.x)+(gun.y - mouseY)*(gun.y - mouseY))
		BC = gun.y - mouseY;
		angle = 90 - (Math.asin(BC/AB)* (180 / Math.PI)) + 270;
	}
	if ((mouseX < gun.x)&&(mouseY < gun.y))
	{
		AB = Math.sqrt((gun.x - mouseX)*(gun.x - mouseX)+(gun.y - mouseY)*(gun.y - mouseY))
		BC = gun.y - mouseY;
		angle = Math.asin(BC/AB)* (180 / Math.PI) + 180;
	}
	if ((mouseX < gun.x)&&(mouseY > gun.y))
	{
		AB = Math.sqrt((gun.x - mouseX)*(gun.x - mouseX)+(mouseY - gun.y)*(mouseY - gun.y))
		BC = mouseY - gun.y;
		angle = 90 - (Math.asin(BC/AB)* (180 / Math.PI)) + 90;
	}
	if ((mouseX > gun.x)&&(mouseY > gun.y))
	{
		AB = Math.sqrt((mouseX - gun.x)*(mouseX - gun.x)+(mouseY - gun.y)*(mouseY - gun.y))
		BC = mouseY - gun.y;
		angle = Math.asin(BC/AB)* (180 / Math.PI);
	}
	gun.rotation = Math.round(angle);
	traceText.htmlText = ("угол: "+angle+"<br>косинус: "+Math.cos(angle)+"<br>синус: "+Math.sin(angle));
}
function addBall (event:MouseEvent)
{
	var newBall:ball = new ball();
	if ((mouseX > gun.x)&&(mouseY < gun.y))
	{
		newBall.x = gun.x + Math.cos(angle - 270) * 46.85;
		newBall.y = gun.y - Math.sin(angle - 270) * 46.85;
	}
	if ((mouseX < gun.x)&&(mouseY < gun.y))
	{
		newBall.x = gun.x - Math.cos(angle - 180) * 46.85;
		newBall.y = gun.y - Math.sin(angle - 180) * 46.85;
	}
	if ((mouseX < gun.x)&&(mouseY > gun.y))
	{
		newBall.x = gun.x - Math.cos(angle - 90) * 46.85;
		newBall.y = gun.y + Math.sin(angle - 90) * 46.85;
	}
	if ((mouseX > gun.x)&&(mouseY > gun.y))
	{
		newBall.x = gun.x + (Math.cos(angle) * 46.85);
		newBall.y = gun.y + (Math.sin(angle) * 46.85);
	}
	addChild(newBall).name = "ball" + i;
	i ++;
}
stage.addEventListener (Event.ENTER_FRAME, mcursor);
stage.addEventListener (MouseEvent.CLICK, addBall);
Вложения
Тип файла: rar game.rar (22.7 Кб, 45 просмотров)

Старый 14.06.2011, 18:56
S-ed вне форума Посмотреть профиль Отправить личное сообщение для S-ed Найти все сообщения от S-ed
  № 2  
S-ed
 
Аватар для S-ed

Регистрация: Jul 2001
Адрес: SPb.RU
Сообщений: 148
Отправить сообщение для S-ed с помощью ICQ
Math.sin и вообще все тригонометрические функции принимают аргумент в радианах.
__________________
RTFM

Старый 14.06.2011, 19:03
КорДум вне форума Посмотреть профиль Отправить личное сообщение для КорДум Найти все сообщения от КорДум
  № 3  
КорДум
 
Аватар для КорДум

блогер
Регистрация: Jan 2008
Адрес: syktyvkar
Сообщений: 3,803
Записей в блоге: 10
Переделайте хотя бы if-if-if на if-else.
__________________
тут я

Старый 14.06.2011, 19:04
samana вне форума Посмотреть профиль Отправить личное сообщение для samana Найти все сообщения от samana
  № 4  
samana
 
Аватар для samana

блогер
Регистрация: Mar 2008
Адрес: Днепропетровск
Сообщений: 1,783
Записей в блоге: 3
Цитата:
Мне просто нужно создать шарик почти на краю пушки
Узнайте координаты на пушке, где должен появится шар. Переведите эти координаты в глобальные, и поместите туда шар.
Код AS3:
var boom_point:Point=boom.localToGlobal(new Point(50,0));
ball.x=boom_point.x;
ball.y=boom_point.y;


Последний раз редактировалось samana; 14.06.2011 в 19:11.
Старый 14.06.2011, 19:06
Ssannn вне форума Посмотреть профиль Отправить личное сообщение для Ssannn Найти все сообщения от Ssannn
  № 5  
Ssannn

Регистрация: Jun 2011
Сообщений: 3
Большое спасибо! Просто в самом флэше в описании классов для Math.asin было написано в радианах, а в Math.sin ничего не написали, вот я и подумал, что в градусах!

Старый 14.06.2011, 19:19
alatar вне форума Посмотреть профиль Отправить личное сообщение для alatar Найти все сообщения от alatar
  № 6  
alatar
 
Аватар для alatar

блогер
Регистрация: Dec 2008
Адрес: Israel, Natanya
Сообщений: 4,740
Записей в блоге: 11
Даже если бы Math.sin принимал параметры в градусах, синус положительного угла может быть отрицательным, а отрицательного положительным.
__________________
משיח לא בא
משיח גם לא מטלפן

Старый 14.06.2011, 19:22
goodguy вне форума Посмотреть профиль Найти все сообщения от goodguy
  № 7  
goodguy
Banned
[+1 05.11.11]
[+1 09.08.11]

Регистрация: Jan 2010
Адрес: РФ. Кемеровская область
Сообщений: 3,243
samana, если пушка поворачивается, то так сделать не получится.
Вообще, это делается элементарно:
Код AS3:
ball.x = cannon.x + Math.sin(angle * Math.PI / 180) * 100;
ball.y = cannon.y - Math.cos(angle * Math.PI / 180) * 100;
Отставит шар от пушки на 100 пикселей. В зависимости от того, как изначально сделано изображение пушки, возможно прийдется изменить минус на плюс, или наоборот, или сделать оба плюса. Ну, это уже мелочи

Старый 14.06.2011, 19:26
Ssannn вне форума Посмотреть профиль Отправить личное сообщение для Ssannn Найти все сообщения от Ssannn
  № 8  
Ssannn

Регистрация: Jun 2011
Сообщений: 3
Цитата:
Узнайте координаты на пушке, где должен появится шар. Переведите эти координаты в глобальные, и поместите туда шар.
Код AS3:
var boom_point:Point=boom.localToGlobal(new Point(50,0));
ball.x=boom_point.x;
ball.y=boom_point.y;
а куда нужно писать этот код? в мувик с пушкой или на кадр? А то как ни пробовал - кучу ошибок наловил

Старый 14.06.2011, 19:36
samana вне форума Посмотреть профиль Отправить личное сообщение для samana Найти все сообщения от samana
  № 9  
samana
 
Аватар для samana

блогер
Регистрация: Mar 2008
Адрес: Днепропетровск
Сообщений: 1,783
Записей в блоге: 3
Цитата:
Сообщение от goodguy Посмотреть сообщение
samana, если пушка поворачивается, то так сделать не получится.
Странно, но у меня получается

В вашем варианте таки нужно оба плюса.


Последний раз редактировалось samana; 14.06.2011 в 19:44.
Старый 14.06.2011, 19:52
alatar вне форума Посмотреть профиль Отправить личное сообщение для alatar Найти все сообщения от alatar
  № 10  
alatar
 
Аватар для alatar

блогер
Регистрация: Dec 2008
Адрес: Israel, Natanya
Сообщений: 4,740
Записей в блоге: 11
Плюсы, минусы...
Код AS3:
/* расстояние от центра башни
 * до конца ствола
 */
var len:int = 50;
/* угол поворота башни */
var angle:Number = 45;
 
var point:Point = Point.polar(len, angle * Math.PI / 180);
 
/* при условии, что центр башни в локальных
 * координатах 0, 0. В противном случае добавить
 * смещение.
 */
newBall.x = gun.x + point.x;
newBall.y = gun.y + point.y;
__________________
משיח לא בא
משיח גם לא מטלפן

Создать новую тему Закрытая тема Часовой пояс GMT +4, время: 09:48.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

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

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


 


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


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