Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Узнать, имеется ли "стена" (http://www.flasher.ru/forum/showthread.php?t=174913)

t4arty 05.02.2012 18:06

Узнать, имеется ли "стена"
 
Есть код расстановки и добавления спрайтов:
Код AS3:

public function init_walls():void {
                        var xrow:int = stage.stageWidth / step;
                        var yrow:int = stage.stageHeight / step;
 
 
                        for (var i:int = 1; i < xrow; i+=2) {
                                for (var ii:int = 1; ii < yrow; ii+=2) {
                                        wall = new Wall();
                                        this.addChild(wall);
 
                                        wall.x = step * i;
                                        wall.y = step * ii;
                                }
                        }
                }

и имеется еще спрайт, который может передвигаться (шаг перемещения равен step)

Вопрос, как узнать что стена имеется и соответственно не столкнутся с ней?

elder_Nosferatu 05.02.2012 18:25

Создайте модельку - матрицу тайлов (ваших стен) иточку с координатами движущегося объекта в этой матрице.

пример:
Код:

1 1 1 1 1 1 1
1 0 0 0 0 0 1
1 0 0 1 0 0 1
1 0 0 1 0 0 1
1 0 0 0 1 0 1
1 0 0 0 0 1 1
1 1 1 1 1 1 1

[1] - стена;
[0] - не стена.
Теперь вам надо всего лиш работать с массивом и точкой в нем. при изменении положения точки перемещать объект на экране

Jewelz 06.02.2012 02:23

или сделать аналогичную проверку через bitmapData и заполненные/пустые пиксели

Tails 06.02.2012 02:37

Jewelz
А зачем это через битмапу делать ?

Jewelz 06.02.2012 02:49

как альтернативный вариант

можно сразу визуализировать - удобно
упрощаются проверки если клетки не только 1x1
ну и использование разных плюшек битмапдаты в определенных условиях, например можно ли попасть из одной точки в другую просто используя заливку

по скорости доступа к ячейке не знаю насколько медленнее (или быстрее), чем доступ к элементам массива, но не думаю что сильно медленней, завтра проверю для интереса =)

t4arty 06.02.2012 21:44

решил, правда самому не нравиться, но работает :)

Код AS3:

var a:int = 0;
                                if (this.x <= 0) {
                                        this.x = this.x;
                                }else {
                                        for (var i:int = 0; i < f.length; i++) { // f - это массив со стенами :)
                                                w = f[i];
                                                if ((w.y == this.y) && (w.x == this.x - step)) {
                                                        a = 1;
                                                        break;
                                                }
                                        }
                                        if (a == 1) {
                                                this.x = this.x;
                                        }else {
                                                this.x -= step;
                                                i = 0;
                                        }
                                }

P.S: возможно есть более легкое решение :)


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

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