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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 11.01.2014, 15:05
Furinax вне форума Посмотреть профиль Отправить личное сообщение для Furinax Найти все сообщения от Furinax
  № 11  
Ответить с цитированием
Furinax
[+1 02.09.15]

Регистрация: Mar 2009
Адрес: Moscow
Сообщений: 469
Цитата:
Сообщение от Isfet Посмотреть сообщение
покажите скрин как должна выглядеть карта по вашей маске[/as3]
Картинка может быть любой, она строится динамически по коду из того, что есть. Если каких-то видов тайлов не хватает, то их всегда можно дорисовать. И эти условия вполне достаточны для решения это задачи.

Цитата:
Сообщение от Isfet Посмотреть сообщение
а вообще задача абсолютно простая, прочитайте мой пост выше, храните тайлы как я писал выше
Кажется, что простая. Ваш пост выше я прочитал, там не решается что и в какой ситуации отрисовать, а решается как хранить данные, с этим проблем нету.

Цитата:
Сообщение от Isfet Посмотреть сообщение
роверяете 4 ячейки слева справа сверху и снизу, и составляете строку, допустим если такой вариант:
--0
1 1 1
--0

сверху 0 значит там будет стенка , пишем в строку 1, справа 1 , значит там нет стенки, добавляем в строку "0" , получаем "10" , снизу 0 - > "101" , слева 1 - > "1010",

по полученной строке вытаскиваем тайл из массива
Код AS3:
tile = arr["1010"];
И приходим ровно к тому же решению что у меня сейчас, только вместо сотни if`ов - будет массив с сотней ячеек типа:

Код AS3:
arr["0000"]
arr["0001"];
arr["0011"];
arr["0111"];
arr["1111"];
arr["1000"];
arr["1100"];
arr["1110"];
arr["1110"];
arr["0101"];
...
и так далее

Старый 11.01.2014, 15:15
Isfet вне форума Посмотреть профиль Отправить личное сообщение для Isfet Найти все сообщения от Isfet
  № 12  
Ответить с цитированием
Isfet

Регистрация: Mar 2012
Адрес: г.Новосибирск
Сообщений: 381
это не массив всевозможных комбинаций (а их 256), это массив который хранит данные о том, с какой стороны у вашего тайла-картинки - есть стена. допусти левый верхний тайл из вашего изображения должен лежать в ячейке arr["0011"]

Старый 11.01.2014, 15:16
Akopalipsis вне форума Посмотреть профиль Найти все сообщения от Akopalipsis
  № 13  
Ответить с цитированием
Akopalipsis
Banned
[+4 24.02.14]
[+4 07.11.13]
[+ 13.03.14]

Регистрация: Mar 2013
Сообщений: 1,864
Тут вот про генерацию пазла и внизу пример, может Вам пригодится.

Старый 11.01.2014, 15:27
Furinax вне форума Посмотреть профиль Отправить личное сообщение для Furinax Найти все сообщения от Furinax
  № 14  
Ответить с цитированием
Furinax
[+1 02.09.15]

Регистрация: Mar 2009
Адрес: Moscow
Сообщений: 469
Цитата:
Сообщение от Isfet Посмотреть сообщение
это не массив всевозможных комбинаций (а их 256), это массив который хранит данные о том, с какой стороны у вашего тайла-картинки - есть стена. допусти левый верхний тайл из вашего изображения должен лежать в ячейке arr["0011"]
И получается у меня будет ассоциативный массив с 256 ячейками, каждая из которых сответствует какой-то комбнации?
А как мне понять, что, допустим надо в arr["1111"] положить именно FieldTileMM.png, самому предварительно рассмотрев все случаи "на глаз"?

Цитата:
Сообщение от Akopalipsis Посмотреть сообщение
Тут вот про генерацию пазла и внизу пример, может Вам пригодится.
спасибо, хоть и не совсем то, но тоже очень интересно. Возможно поможет.

Старый 11.01.2014, 15:29
Isfet вне форума Посмотреть профиль Отправить личное сообщение для Isfet Найти все сообщения от Isfet
  № 15  
Ответить с цитированием
Isfet

Регистрация: Mar 2012
Адрес: г.Новосибирск
Сообщений: 381
массив будет с вашим количеством тайлом, то есть 12, и класть их туда нужно относительно стен в рисунке тайла

Старый 11.01.2014, 15:29
Akopalipsis вне форума Посмотреть профиль Найти все сообщения от Akopalipsis
  № 16  
Ответить с цитированием
Akopalipsis
Banned
[+4 24.02.14]
[+4 07.11.13]
[+ 13.03.14]

Регистрация: Mar 2013
Сообщений: 1,864
Цитата:
И получается у меня будет ассоциативный массив с 256 ячейками
Почему вас смущает массив с 256 элементами, но не смущает 256 картинки?
Или Вы как то насчитали, что у Вас элементов будет больше чем картинок??

Старый 11.01.2014, 15:39
udaaff вне форума Посмотреть профиль Отправить личное сообщение для udaaff Найти все сообщения от udaaff
  № 17  
Ответить с цитированием
udaaff
...

модератор форума
Регистрация: Sep 2006
Адрес: Minsk
Сообщений: 4,286
Решал похожую задачу, только строил границу отдельно от тайлов, как в этом приложении https://apps.facebook.com/farmheroes. Не совсем то, что тебе надо, но если сгодится опишу как построить. По твоей задаче, я бы разбил каждый из тайлов на четыре участка. Получилось бы всего три разных типа: две линии и уголок. Тип каждого участка зависел бы от наличия соседних с этим участком тайлов. У меня по моей задаче это выглядит как-то так:
Код AS3:
 
		/**
		 * @param data Array of Boolean - массив показывающий наличие клеток по сторонам
		 * 			0  1  2
		 * 			7  X  3
		 * 			6  5  4
		 */
		public function setBorder(a:Array):void
		{
			this.setGrid(this._gridTL, a[7], a[0], a[1]); // grid - это мувик с вариантами границы
			this.setGrid(this._gridTR, a[1], a[2], a[3]); // можно использовать один для всех четырех участков, 
			this.setGrid(this._gridBR, a[3], a[4], a[5]); // повернутый под нужным углом
			this.setGrid(this._gridBL, a[5], a[6], a[7]);
		}
 
		private function setGrid(grid:MovieClip, a:Boolean, b:Boolean, c:Boolean):void
		{
			if (a && c)
				grid.gotoAndStop(1);
			else if (a)
				grid.gotoAndStop(2);
			else if (c)
				grid.gotoAndStop(4);
			else if (b)
				grid.gotoAndStop(3);
			else
				grid.gotoAndStop("empty");	
		}

Старый 11.01.2014, 16:27
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 18  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Почему не сделать просто восьми(четырех?)мерный массив со ссылками на тайлы? То есть не непонятный какой то arr["1010"] а arr[1][0][1][0]. И никаких if'ов.
А, понял в чем проблема.
Вам же мало знать, что вверху 1. Вам надо знать, какого типа там тайл. Это вообще ТАК не решается.
__________________
Reality.getBounds(this);

Старый 11.01.2014, 22:05
Furinax вне форума Посмотреть профиль Отправить личное сообщение для Furinax Найти все сообщения от Furinax
  № 19  
Ответить с цитированием
Furinax
[+1 02.09.15]

Регистрация: Mar 2009
Адрес: Moscow
Сообщений: 469
Цитата:
Сообщение от udaaff Посмотреть сообщение
Решал похожую задачу, только строил границу отдельно от тайлов, как в этом приложении https://apps.facebook.com/farmheroes.
Да, нужно именно как там. Там по сути, то же самое что и у меня, только тайлы выглядят по-другому.

Старый 11.01.2014, 22:23
silin вне форума Посмотреть профиль Посетить домашнюю страницу silin Найти все сообщения от silin
  № 20  
Ответить с цитированием
silin
 
Аватар для silin

блогер
Регистрация: Mar 2003
Адрес: Моск. обл.
Сообщений: 5,269
Записей в блоге: 6
я бы собирал эти тайлы 'на лету' из 9ти элементов
навскидку попробовал упрощенный вариант,
на самом деле все будет сложнее из-за линий каймы, но всяко проще, чем собирать из готовых, да и многовато их нужно, имхо 256(2^8), ну может за вычетом каких-то нереальных, но никак не 12 же
Код AS3:
package
{
	import flash.display.Bitmap;
	import flash.display.BitmapData;
	import flash.display.Sprite;
	import flash.display.StageScaleMode;
	import flash.geom.Rectangle;
 
	public class Main extends Sprite
	{
		private var size:Number = 30;
 
		private var srcRounded:Sprite = new Sprite();
		private var srcCorner:Sprite = new Sprite();
 
		public function Main():void
		{
			stage.scaleMode = StageScaleMode.NO_SCALE;
			srcRounded.graphics.beginFill(0xC0C0C0);
			srcRounded.graphics.drawRoundRect(0, 0, size, size, 0.5 * size, 0.5 * size);
			//srcRounded.graphics.endFill();
			//srcRounded.graphics.lineStyle(1, 0);
			//srcRounded.graphics.drawRoundRect(size/6, size/6, 2*size/3, 2*size/3, size/3, size/3);
 
			srcCorner.graphics.beginFill(0xC0C0C0);
			srcCorner.graphics.drawRect(0, 0, size, size);
 
 
			var grid:Array = [
				[0, 1, 1, 0, 0, 0, 1, 1, 0], 
				[1, 1, 0, 1, 1, 1, 0, 1, 1], 
				[1, 1, 0, 0, 0, 1, 0, 1, 1], 
				[1, 1, 0, 0, 0, 1, 0, 1, 1], 
				[1, 0, 1, 1, 1, 1, 1, 0, 1], 
				[1, 1, 1, 0, 0, 1, 1, 1, 1], 
				[1, 1, 1, 0, 0, 1, 1, 1, 1], 
				[1, 1, 1, 1, 1, 1, 1, 1, 1], 
				[0, 1, 0, 1, 1, 1, 0, 1, 0]]
 
 
 
			for (var j:int = 0; j < grid.length; j++) 
			{
				var line:Array = grid[j];
				for (var i:int = 0; i < line.length; i++) 
				{
					if (line[i])
					{
						var tile:Bitmap = getTile(
							line[i - 1],
							grid[j - 1] ? grid[j - 1][i] : 0,
							line[i+1],
							grid[j + 1] ? grid[j + 1][i] : 0
						);
						tile.x = size * i;
						tile.y = size * j;
						addChild(tile);
					}
				}
			}
		}
 
		private function getTile(l:Boolean,t:Boolean,r:Boolean,b:Boolean):Bitmap
		{
			var bmd:BitmapData = new BitmapData(size, size, true, 0);
 
 
			drawSegm(bmd, 0, 0, l || t);
			drawSegm(bmd, 1, 0, t);
			drawSegm(bmd, 2, 0, r || t);
			drawSegm(bmd, 0, 1, l);
			drawSegm(bmd, 1, 1, false);
			drawSegm(bmd, 2, 1, r);
			drawSegm(bmd, 0, 2, l || b);
			drawSegm(bmd, 1, 2, b);
			drawSegm(bmd, 2, 2, b || r);
 
 
			return new Bitmap(bmd);
 
 
		}
 
		private function drawSegm(bmd:BitmapData, i:int, j:int, corner:Boolean):void
		{
 
			var s:Number = size / 3;
			var rec:Rectangle = new Rectangle(i * s, j * s, s, s);
			var src:Sprite = corner ? srcCorner : srcRounded;
			bmd.draw(src, null, null, null, rec);
		}
 
	}
 
}

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

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

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


 


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


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