![]() |
|
||||||||||
|
|||||
|
Регистрация: Nov 2009
Сообщений: 176
|
Добрый день!
Столкнулся с проблемой. Есть окружность. Внутри окружности летает шарик. Когда шарик ударяется об стену он отлетает на какой то угол. Как найти этот угол отражения? |
|
|||||
|
Под каким углом он ударяется к касательной в точке соприкосновения, под таким и отлетит. Наверное)))
__________________
Gamedev != Gaming (http://twitter.com/#!/GenzoDev). Don't forget to [+] if it works. |
|
|||||
|
Если не описываете физику всего происходящего (как минимум действие дессипативных сил на идеально упригий шарик и идеально упругую "скоролупу"), то картинкой вполне обойдетесь. Последний раз редактировалось iNils; 31.01.2012 в 15:27. |
|
|||||
|
Регистрация: Nov 2009
Сообщений: 176
|
картинку я и сам понимаю как нарисовать, как это общитать?
|
|
|||||
|
Код движения в студию
__________________
Gamedev != Gaming (http://twitter.com/#!/GenzoDev). Don't forget to [+] if it works. |
|
|||||
|
блогер
Регистрация: Feb 2008
Адрес: Россия, Новосибирск, Академгородок
Сообщений: 2,113
Записей в блоге: 1
|
Эх, нечасто я в разделе про as3 пишу
![]() import flash.display.Graphics; var temp:Sprite = new Sprite(); addChild(temp); var areaRadius:int = 180; var areaCenterX:int = 275; var areaCenterY:int = 200; var ballRadius = 20; var ball:Object = {}; ball.x = areaCenterX + 90; ball.y = areaCenterY; var ballSpeed:Number = 20; var randomAngle:Number = 90 * Math.PI / 180; ball.vx = Math.cos(randomAngle) * ballSpeed; ball.vy = Math.sin(randomAngle) * ballSpeed; var hitDistance:int = areaRadius - ballRadius; var g:Graphics = this.graphics; g.lineStyle(1,0xFF0000,1); g.drawCircle(areaCenterX,areaCenterY,areaRadius); var ballSprite:Sprite = new Sprite(); ballSprite.graphics.lineStyle(1,0x00FF00,1); ballSprite.graphics.drawCircle(0,0,ballRadius); addChild(ballSprite); function step(e:Event = null):void { var newX:Number = ball.x + ball.vx; var newY:Number = ball.y + ball.vy; var dx:Number = (newX - areaCenterX); var dy:Number = (newY - areaCenterY); var distance:Number = Math.sqrt(dx * dx + dy * dy); if (distance >= hitDistance) { var ballAngle:Number = Math.atan2(ball.vy,ball.vx); var hitX:Number = hitDistance * Math.cos(ballAngle); var hitY:Number = hitDistance * Math.sin(ballAngle); var hitAngle:Number = Math.atan2(newY - areaCenterY,newX - areaCenterX); var bounceAngle:Number = ballAngle+2* (hitAngle - ballAngle); temp.graphics.clear(); temp.graphics.lineStyle(1,0xFF00FF,1); temp.graphics.moveTo(newX, newY); temp.graphics.lineTo(newX + Math.cos(bounceAngle) * 200, newY + Math.sin(bounceAngle) * 200); ball.vx = ballSpeed * - Math.cos(bounceAngle); ball.vy = ballSpeed * - Math.sin(bounceAngle); } ball.x += ball.vx; ball.y += ball.vy; // ballSprite.x = ball.x; ballSprite.y = ball.y; } step(); addEventListener(Event.ENTER_FRAME, step); P.S. У меня код с ошибкой, через некоторое время шарик "выравнивается". Если исправлю — обновлю код ![]()
__________________
hauts.ru Последний раз редактировалось Hauts; 31.01.2012 в 16:10. |
|
|||||
|
Регистрация: Nov 2009
Сообщений: 176
|
Большое спасибо!!!
|
![]() |
![]() |
Часовой пояс GMT +4, время: 22:13. |
|
|
« Предыдущая тема | Следующая тема » |
|
|