|
|
« Предыдущая тема | Следующая тема » |
Опции темы | Опции просмотра |
|
|
|||||
[+1 02.09.15]
Регистрация: Mar 2009
Адрес: Moscow
Сообщений: 469
|
Картинка может быть любой, она строится динамически по коду из того, что есть. Если каких-то видов тайлов не хватает, то их всегда можно дорисовать. И эти условия вполне достаточны для решения это задачи.
Цитата:
Цитата:
|
|
|||||
Регистрация: Mar 2012
Адрес: г.Новосибирск
Сообщений: 381
|
это не массив всевозможных комбинаций (а их 256), это массив который хранит данные о том, с какой стороны у вашего тайла-картинки - есть стена. допусти левый верхний тайл из вашего изображения должен лежать в ячейке arr["0011"]
|
|
|||||
[+1 02.09.15]
Регистрация: Mar 2009
Адрес: Moscow
Сообщений: 469
|
Цитата:
А как мне понять, что, допустим надо в arr["1111"] положить именно FieldTileMM.png, самому предварительно рассмотрев все случаи "на глаз"? Цитата:
|
|
|||||
Регистрация: Mar 2012
Адрес: г.Новосибирск
Сообщений: 381
|
массив будет с вашим количеством тайлом, то есть 12, и класть их туда нужно относительно стен в рисунке тайла
|
|
|||||
Banned
[+4 24.02.14]
[+4 07.11.13] [+ 13.03.14] Регистрация: Mar 2013
Сообщений: 1,864
|
Цитата:
Или Вы как то насчитали, что у Вас элементов будет больше чем картинок?? |
|
|||||
...
модератор форума
Регистрация: Sep 2006
Адрес: Minsk
Сообщений: 4,286
|
Решал похожую задачу, только строил границу отдельно от тайлов, как в этом приложении https://apps.facebook.com/farmheroes. Не совсем то, что тебе надо, но если сгодится опишу как построить. По твоей задаче, я бы разбил каждый из тайлов на четыре участка. Получилось бы всего три разных типа: две линии и уголок. Тип каждого участка зависел бы от наличия соседних с этим участком тайлов. У меня по моей задаче это выглядит как-то так:
/** * @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"); } |
|
|||||
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
Почему не сделать просто восьми(четырех?)мерный массив со ссылками на тайлы? То есть не непонятный какой то arr["1010"] а arr[1][0][1][0]. И никаких if'ов.
А, понял в чем проблема. Вам же мало знать, что вверху 1. Вам надо знать, какого типа там тайл. Это вообще ТАК не решается.
__________________
Reality.getBounds(this); |
|
|||||
[+1 02.09.15]
Регистрация: Mar 2009
Адрес: Moscow
Сообщений: 469
|
Цитата:
|
|
|||||
я бы собирал эти тайлы 'на лету' из 9ти элементов
навскидку попробовал упрощенный вариант, на самом деле все будет сложнее из-за линий каймы, но всяко проще, чем собирать из готовых, да и многовато их нужно, имхо 256(2^8), ну может за вычетом каких-то нереальных, но никак не 12 же 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. |
|
« Предыдущая тема | Следующая тема » |
|
|