|
|
« Предыдущая тема | Следующая тема » |
Опции темы | Опции просмотра |
|
|
|||||
Перемещение персонажа по карте, созданной массивами (уравнями)
Я захотел сделать карту, по которой можно будет перемещать персонажа. Столкнулся с проблемой - как "поставить" персонажа на какую-либо клетку, не меняя ее цвет и как его передвигать?
Вот мои коды: package{ import flash.display.*; import flash.events.Event; import flash.events.*; public class Main extends Sprite{ private var map:Map=new Map(); public function Main(){ if(stage){ init(); }else{ addEventListener(Event.ADDED_TO_STAGE,init); } } private function init(e:Event=null):void{ removeEventListener(Event.ADDED_TO_STAGE,init); stage.showDefaultContextMenu=false; stage.align=StageAlign.TOP_LEFT; stage.scaleMode=StageScaleMode.NO_SCALE; addChild(map); } } } package{ import flash.display.Sprite; public class Map extends Sprite{ private var map:Array=new Array(); private var partMap:PartMap; public function Map():void{ createMap(); } private function createMap():void{ map[0]=[1,1,1,1,1,1,1,1,1,1]; map[1]=[1,0,0,0,0,0,0,0,0,1]; map[2]=[1,0,0,0,0,0,0,0,0,1]; map[3]=[1,0,0,0,0,0,0,0,0,1]; map[4]=[1,1,1,1,1,1,1,1,1,1]; for(var i:uint=0;i<map.length;i++){ for(var j:uint=0;j<map[i].length;j++){ partMap=new PartMap(); partMap.drawPartMap(map[i][j]); partMap.x=j*100; partMap.y=i*100; addChild(partMap); } } } } } package{ import flash.display.Shape; public class PartMap extends Shape{ private var color:uint; public function PartMap(){ } public function drawPartMap(type:uint):void{ switch(type){ case 0: color=0xCCCCCC; break; case 1: color=0xFFCC99; break; } graphics.lineStyle(1,0,1); graphics.beginFill(color,1); graphics.drawRect(0,0,100,100); } } }
__________________
Humanity.push(new Man()); |
|
|||||
Banned
[+1 05.11.11]
[+1 09.08.11] Регистрация: Jan 2010
Адрес: РФ. Кемеровская область
Сообщений: 3,243
|
В чем конкретно проблема?
Где хотя бы попытка сделать это самостоятельно? |
|
|||||
Я пытался сделать третий тип, "2". Как тут:
public function drawPartMap(type:uint):void{ graphics.lineStyle(1,0,1); switch(type){ case 0: color=0xCCCCCC; graphics.beginFill(color,1); graphics.drawRect(0,0,100,100); break; case 1: color=0xFFCC99; graphics.beginFill(color,1); graphics.drawRect(0,0,100,100); break; case 2: color=0xFFCC99; graphics.beginFill(color,1); graphics.drawRect(0,0,100,100); graphics.beginFill(0xFFFFFF,1); graphics.drawCircle(50,50,25); } } Добавлено через 7 минут Хотя передвижение осуществить тоже трудно.
__________________
Humanity.push(new Man()); Последний раз редактировалось Lyso; 05.06.2011 в 12:21. |
|
|||||
Banned
[+1 05.11.11]
[+1 09.08.11] Регистрация: Jan 2010
Адрес: РФ. Кемеровская область
Сообщений: 3,243
|
Чтобы окрасить клетку обратно, можно после каждого перемещения объекта делать graphics.clear() и сразу же все перерисовывать.
|
|
|||||
Так я же не знаю настроек, которые были стандартны (до появления персонажа).
тем более таким способом даже перемещать трудно клетку. Было бы легче, если бы можно было "наложить" круг сверху, не меняя ничего и свободно передвигаю, нопри этом взаимодействуя с блоками.
__________________
Humanity.push(new Man()); |
|
|||||
лучше в клетке описать ее состояния, а далее просто назначать нужное, тогда все будет гораздо проще.
персонаж на одном слое карта на другом, все в общем контейнере, подписываете клетки на клик и по клику смещаете персонаж в координаты клетки (т.к. он в другом контейнере) то это ничего другого не затронет. |
|
|||||
Регистрация: May 2011
Адрес: http://jai.ng7.ru http://kuponid.ru
Сообщений: 49
|
Неверно в корне. Объекты можно передвигать за счёт свойств .x и .y при создании их в предке путём addChild, а не перерисовывать их...
допустим так: // Определяем юзера и поле var board, user:Sprite = new Sprite; var userIdentif:int = 0; //создаём поле board.graphics.beginFill(0xFFFF00); board.graphics.drawRect(0, 0, 500, 500); board.graphics.endFill(); addChild(board); // на поле рисуем и создаём персонаж user.graphics.beginFill(0xFF00FF); user.graphics.drawCircle(0, 0, 50); user.graphics.endFill(); // И самая кульминация присоединяем юзера к полю // board.addChild(user); // но этого мало, нам надо точно знать идентификатор юзера // Сохраним идентификатор созданного юзера, чтобы потом обращаться к нему userIdentif = board.getChildIndex(board.addChild(user)); // Теперь чтобы сдвинуть юзера по х и у надо обратиться к нему по имени board.getChildAt(userIdentif).x = 200; board.getChildAt(userIdentif).y = 300; |
|
|||||
блогер
Регистрация: Jun 2005
Адрес: Господи пожалуйста не Новосибирск
Сообщений: 6,598
Записей в блоге: 17
|
А зачем нужно стирать клетку, чтобы поставить туда персонажа? Нет возможности поставить персонажа "поверх" клетки?
__________________
Тут мужик танцует и поёт про флэш |
|
|||||
У меня не получается сделать по-другому.
__________________
Humanity.push(new Man()); |
Часовой пояс GMT +4, время: 04:20. |
|
« Предыдущая тема | Следующая тема » |
Теги |
клетки , передвижение , персонаж |
Опции темы | |
Опции просмотра | |
|
|