![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|
|
|||||
|
Регистрация: Oct 2012
Сообщений: 191
|
Здравствуйте! Вопрос будет довольно обширный и всесторонний...
Начну с кода. Оставляйте пожалуйста примечания (как можно было бы сделать лучше), если такие возникнут...А они возникнут!!! Main.as package { import flash.display.*; import flash.events.*; public class Main extends MovieClip { var player:Sprite; var line:Sprite; var lineArray:Array = new Array(); var right:Boolean; var left:Boolean; var stay:Boolean; var speed:int = 5; function Main() { createPlayer() //Создаем игрока CONTROLER() //Управление для игрока } function createPlayer() { player = new Sprite(); player.graphics.lineStyle(1,0xFF0000,1); player.graphics.drawCircle(0,0,16); player.x = 200; player.y = 200; addChild(player); var numRotation:int = 0; for(var i = 0; i <= 7; i++) { line = new Sprite(); line.graphics.lineStyle(1,0x000000,1); line.graphics.lineTo(0,200); line.x = player.x; line.y = player.y; addChild(line); lineArray.unshift(line); lineArray[0].rotation += numRotation; numRotation += 45; } addEventListener(Event.ENTER_FRAME, linesListener); } function linesListener(e:Event) { for(var j = 0; j < lineArray.length; j++) { lineArray[j].x = player.x; lineArray[j].y = player.y; } } //УПРАВЛЕНИЕ------------------------ function CONTROLER() { stage.addEventListener(KeyboardEvent.KEY_DOWN,key_down); stage.addEventListener(KeyboardEvent.KEY_UP,key_up); stage.addEventListener(Event.ENTER_FRAME,updateMove); } function key_down(e:KeyboardEvent) { if(e.keyCode == 39) { right = true; } if(e.keyCode == 37) { left = true; } if(right && left) { stay = true; } } function key_up(e:KeyboardEvent) { if(e.keyCode == 39) { right = false; } if(e.keyCode == 37) { left = false; } if(right && left) { stay = false; } } function updateMove(e:Event) { if(right) { player.x += speed; } if(left) { player.x -= speed; } if(stay) { //СТОИМ } } } } Спасибо за внимание...И заранее спасибо за любую помощь, а также громадные плюсы тем, кто поможет улучшить код и отписывать "примечания"... ![]() |
|
|||||
|
Вам нужно рисовать не линии и поворачивать их, а векторы. Тогда вы указываете массив векторов препятствий, и через операции над векторами(возможно требуется дополнить класс) проверяете пересекаются ли вектора. После этого при получении информации об пересечении двух векторов уменьшаете длину скан-вектора.
Добавлено через 37 минут По логике примерно так. Берете центр к примеру отсчёта координат 0х0, игрок у Вас находиться в позиции 20х0 и от него пошли вектора. Есть массив в виде векторов которые описывают края препятствий. Для проведения исчислений вам нужно нормализировать все вектора, потом перевести их в одну систему координат, после чего производить операции над ними. Было б немножко больше сегодня времени составил бы пример. Добавлено через 42 минуты полезно Добавлено через 44 минуты полезно
__________________
return this... Последний раз редактировалось AlexCooper; 23.11.2012 в 17:30. |
|
|||||
|
Регистрация: Oct 2012
Сообщений: 191
|
Спасибо огромное за обширный ответ, так как програмированнием я решил заняться самостоятельно и довольно недавно, то больше половины непонял...хотя общий смысл и реализацию вроде разобрал. Буду копаться в этом направлении. И еще отдельное спасибо за ссылки!
|
![]() |
![]() |
Часовой пояс GMT +4, время: 10:09. |
|
|
« Предыдущая тема | Следующая тема » |
|
|