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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 05.06.2011, 11:25
Lyso вне форума Посмотреть профиль Отправить личное сообщение для Lyso Посетить домашнюю страницу Lyso Найти все сообщения от Lyso
  № 1  
Ответить с цитированием
Lyso

Регистрация: Sep 2010
Адрес: Красноярск
Сообщений: 217
Отправить сообщение для Lyso с помощью Skype™
The bomb! Перемещение персонажа по карте, созданной массивами (уравнями)

Я захотел сделать карту, по которой можно будет перемещать персонажа. Столкнулся с проблемой - как "поставить" персонажа на какую-либо клетку, не меняя ее цвет и как его передвигать?

Вот мои коды:

Код AS3:
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);
		}
 
 
	}
}
Код AS3:
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);
				}
			}
 
		}
 
 
 
	}
}
Код AS3:
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);
		}
 
 
	}
}
За персонажа пусть будет обычный белый круг:
Код AS3:
graphics.lineStyle(1,0,1);
graphics.beginFill(0xFFFFFF,1);
graphics.drawCircle(50,50,25);
__________________
Humanity.push(new Man());

Старый 05.06.2011, 12:14
goodguy вне форума Посмотреть профиль Найти все сообщения от goodguy
  № 2  
Ответить с цитированием
goodguy
Banned
[+1 05.11.11]
[+1 09.08.11]

Регистрация: Jan 2010
Адрес: РФ. Кемеровская область
Сообщений: 3,243
В чем конкретно проблема?
Где хотя бы попытка сделать это самостоятельно?

Старый 05.06.2011, 12:17
Lyso вне форума Посмотреть профиль Отправить личное сообщение для Lyso Посетить домашнюю страницу Lyso Найти все сообщения от Lyso
  № 3  
Ответить с цитированием
Lyso

Регистрация: Sep 2010
Адрес: Красноярск
Сообщений: 217
Отправить сообщение для Lyso с помощью Skype™
Я пытался сделать третий тип, "2". Как тут:
Код AS3:
		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.
Старый 05.06.2011, 12:19
samana вне форума Посмотреть профиль Отправить личное сообщение для samana Найти все сообщения от samana
  № 4  
Ответить с цитированием
samana
 
Аватар для samana

блогер
Регистрация: Mar 2008
Адрес: Днепропетровск
Сообщений: 1,783
Записей в блоге: 3
Так сделайте персонаж отдельным объектом, и положите "сверху" карты.

Старый 05.06.2011, 13:12
goodguy вне форума Посмотреть профиль Найти все сообщения от goodguy
  № 5  
Ответить с цитированием
goodguy
Banned
[+1 05.11.11]
[+1 09.08.11]

Регистрация: Jan 2010
Адрес: РФ. Кемеровская область
Сообщений: 3,243
Чтобы окрасить клетку обратно, можно после каждого перемещения объекта делать graphics.clear() и сразу же все перерисовывать.

Старый 05.06.2011, 13:17
Lyso вне форума Посмотреть профиль Отправить личное сообщение для Lyso Посетить домашнюю страницу Lyso Найти все сообщения от Lyso
  № 6  
Ответить с цитированием
Lyso

Регистрация: Sep 2010
Адрес: Красноярск
Сообщений: 217
Отправить сообщение для Lyso с помощью Skype™
Так я же не знаю настроек, которые были стандартны (до появления персонажа).
тем более таким способом даже перемещать трудно клетку.

Было бы легче, если бы можно было "наложить" круг сверху, не меняя ничего и свободно передвигаю, нопри этом взаимодействуя с блоками.
__________________
Humanity.push(new Man());

Старый 05.06.2011, 14:21
nOobCrafter вне форума Посмотреть профиль Отправить личное сообщение для nOobCrafter Найти все сообщения от nOobCrafter
  № 7  
Ответить с цитированием
nOobCrafter

Регистрация: Nov 2008
Сообщений: 894
Записей в блоге: 1
лучше в клетке описать ее состояния, а далее просто назначать нужное, тогда все будет гораздо проще.
персонаж на одном слое карта на другом, все в общем контейнере, подписываете клетки на клик и по клику смещаете персонаж в координаты клетки (т.к. он в другом контейнере) то это ничего другого не затронет.

Старый 05.06.2011, 14:36
chuvak2008f вне форума Посмотреть профиль Отправить личное сообщение для chuvak2008f Найти все сообщения от chuvak2008f
  № 8  
Ответить с цитированием
chuvak2008f

Регистрация: May 2011
Адрес: http://jai.ng7.ru http://kuponid.ru
Сообщений: 49
Неверно в корне. Объекты можно передвигать за счёт свойств .x и .y при создании их в предке путём addChild, а не перерисовывать их...
допустим так:
Код AS3:
// Определяем юзера и поле
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;
апплодисменты!

Старый 05.06.2011, 14:45
Psycho Tiger вне форума Посмотреть профиль Отправить личное сообщение для Psycho Tiger Найти все сообщения от Psycho Tiger
  № 9  
Ответить с цитированием
Psycho Tiger
 
Аватар для Psycho Tiger

блогер
Регистрация: Jun 2005
Адрес: Господи пожалуйста не Новосибирск
Сообщений: 6,598
Записей в блоге: 17
А зачем нужно стирать клетку, чтобы поставить туда персонажа? Нет возможности поставить персонажа "поверх" клетки?

Старый 05.06.2011, 15:27
Lyso вне форума Посмотреть профиль Отправить личное сообщение для Lyso Посетить домашнюю страницу Lyso Найти все сообщения от Lyso
  № 10  
Ответить с цитированием
Lyso

Регистрация: Sep 2010
Адрес: Красноярск
Сообщений: 217
Отправить сообщение для Lyso с помощью Skype™
У меня не получается сделать по-другому.
__________________
Humanity.push(new Man());

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

Теги
клетки , передвижение , персонаж
Опции темы
Опции просмотра

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

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


 


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


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