![]() |
|
||||||||||
|
|||||
|
Регистрация: Jun 2011
Сообщений: 3
|
Или я полностью флэш не понимаю(недавно начал осваивать), или я тупой, но как у меня получается отрицательный синус из положительного угла?
Мне просто нужно создать шарик почти на краю пушки 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); |
|
|||||
|
Math.sin и вообще все тригонометрические функции принимают аргумент в радианах.
__________________
RTFM |
|
|||||
|
Цитата:
Последний раз редактировалось samana; 14.06.2011 в 19:11. |
|
|||||
|
Регистрация: Jun 2011
Сообщений: 3
|
Большое спасибо! Просто в самом флэше в описании классов для Math.asin было написано в радианах, а в Math.sin ничего не написали, вот я и подумал, что в градусах!
|
|
|||||
|
Banned
[+1 05.11.11]
[+1 09.08.11] Регистрация: Jan 2010
Адрес: РФ. Кемеровская область
Сообщений: 3,243
|
samana, если пушка поворачивается, то так сделать не получится.
Вообще, это делается элементарно: Отставит шар от пушки на 100 пикселей. В зависимости от того, как изначально сделано изображение пушки, возможно прийдется изменить минус на плюс, или наоборот, или сделать оба плюса. Ну, это уже мелочи |
|
|||||
|
Регистрация: Jun 2011
Сообщений: 3
|
а куда нужно писать этот код? в мувик с пушкой или на кадр? А то как ни пробовал - кучу ошибок наловил
|
|
|||||
|
Странно, но у меня получается
![]() В вашем варианте таки нужно оба плюса. Последний раз редактировалось samana; 14.06.2011 в 19:44. |
|
|||||
|
Плюсы, минусы...
/* расстояние от центра башни * до конца ствола */ 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, время: 10:30. |
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | |
| Опции просмотра | |
|
|