Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   продвинутые пятнашки (http://www.flasher.ru/forum/showthread.php?t=113225)

Dreel 22.06.2008 16:04

продвинутые пятнашки
 
Товарищи, подскажите плиз как заставить action script понять что все элементы находятся на своем месте.
Я пробовал в каждой ячейке вставить прзрачный мувик а в каждом элементе мозайки прописать
Код:

onClipEvent (enterFrame) {
    if (_root.[невидимый объект].hitTest(_x, _y, true)) {
    ["Какоенить действие..."]
    }
}

но это не подходит для моего случая, как рациональней сделать?
Может указать для каждого элемента необходимые координаты, если да, то как это делается?
Если поможите, то flasher станет моим любим форумом )))

Psycho Tiger 22.06.2008 16:49

Код:

if (my_mc._x>100 && my_mc._x<105 && my_mc._y<120 && my_mc._y>115){
// :D
}

Цитата:

любим форумом )))
Любим форумом? Это как? о_0 Кого это вы любите всем форумом? :D

Dreel 23.06.2008 10:17

В общем есть слой actions в нем мувик, там вставил
Код:

onClipEvent (enterFrame) {
if (Tile1._x>30 && Tile1._x<70 && Tile1._y>30 && Tile1._y<70 &&
        Tile2._x>90 && Tile1._x<125 && Tile1._y>30 && Tile1._y<70 &&
        Tile3._x>145 && Tile1._x<180 && Tile1._y>30 && Tile1._y<70 &&
        Tile4._x>200 && Tile1._x<235 && Tile1._y>30 && Tile1._y<70 &&
               
        Tile5._x>30 && Tile1._x<70 && Tile1._y>90 && Tile1._y<125 &&
        Tile6._x>90 && Tile1._x<125 && Tile1._y>90 && Tile1._y<70 &&
        Tile7._x>145 && Tile1._x<180 && Tile1._y>90 && Tile1._y<125 &&
        Tile8._x>200 && Tile1._x<235 && Tile1._y>90 && Tile1._y<125 &&
       
        Tile9._x>30 && Tile1._x<70 && Tile1._y>145 && Tile1._y<180 &&
        Tile10._x>90 && Tile1._x<125 && Tile1._y>145 && Tile1._y<180 &&
        Tile11._x>145 && Tile1._x<180 && Tile1._y>145 && Tile1._y<180 &&
        Tile12._x>200 && Tile1._x<235 && Tile1._y>145 && Tile1._y<180 &&
       
        Tile13._x>30 && Tile1._x<70 && Tile1._y>200 && Tile1._y<235 &&
        Tile14._x>90 && Tile1._x<125 && Tile1._y>200 && Tile1._y<235 &&
        Tile15._x>145 && Tile1._x<180 && Tile1._y>200 && Tile1._y<235){
        gotoAndStop(2);
        }
}

Не работает, помогите пожалуйста разобраться, кому не сложно :)
Для оператора if нужноновую функцию написать или как?

Или можно прописать как равно
Код:

Tile2._x=90 && Tile2._y=125
Только он ругаться начинает как правильно это прописать?

исходник
http://***************/files/12437995..._____.fla.html

Dreel 23.06.2008 11:28

Вложений: 1
Вот разобрался как на форум заливать, залил исходник, помогите пожалуйста... :wacko:

Psycho Tiger 23.06.2008 12:41

Ты рехнулся в каждом кадре проверять? Пишешь функцию
Код:

function checkSomething(){

}

И в ней проверяешь после хода. И вообще глупо чужие исходники дописывать, свои надо писать с 0 в подобных случаях.

Код:

onClipEvent (enterFrame) {
if (Tile1._x>30 && Tile1._x<70 && Tile1._y>30 && Tile1._y<70 &&
        Tile2._x>90 && Tile1._x<125 && Tile1._y>30 && Tile1._y<70 &&
        Tile3._x>145 && Tile1._x<180 && Tile1._y>30 && Tile1._y<70 &&
        Tile4._x>200 && Tile1._x<235 && Tile1._y>30 && Tile1._y<70 &&
               
        Tile5._x>30 && Tile1._x<70 && Tile1._y>90 && Tile1._y<125 &&
        Tile6._x>90 && Tile1._x<125 && Tile1._y>90 && Tile1._y<70 &&
        Tile7._x>145 && Tile1._x<180 && Tile1._y>90 && Tile1._y<125 &&
        Tile8._x>200 && Tile1._x<235 && Tile1._y>90 && Tile1._y<125 &&
       
        Tile9._x>30 && Tile1._x<70 && Tile1._y>145 && Tile1._y<180 &&
        Tile10._x>90 && Tile1._x<125 && Tile1._y>145 && Tile1._y<180 &&
        Tile11._x>145 && Tile1._x<180 && Tile1._y>145 && Tile1._y<180 &&
        Tile12._x>200 && Tile1._x<235 && Tile1._y>145 && Tile1._y<180 &&
       
        Tile13._x>30 && Tile1._x<70 && Tile1._y>200 && Tile1._y<235 &&
        Tile14._x>90 && Tile1._x<125 && Tile1._y>200 && Tile1._y<235 &&
        Tile15._x>145 && Tile1._x<180 && Tile1._y>200 && Tile1._y<235){
        gotoAndStop(2);
        }
}

Выделил в 1 строчке, в остальных так же.
Потом нужно включить мозг и подумать, как жп проверять... Ага, придумал! Сделаем 2 вложеных цикла и в них будем проверять координаты. Будет что то вроде этого (за работоспособность не ручаюсь, мы даем пинок - рыть придетсья самому)
Код:

for (var i:Number=1; i<=4; i++){
for (var j:Number=1; j<=4; j++){
if (this["Tile"+i+"_"+"j"]._x==i*tileStep && this["Tile"+i+"_"+"j"]._y==j*tileStep){
trace('yahoo!');
}
}

Скажу более того, код не будет работать, ибо именование tile`ов как
Код:

tile = x+y*4;
это вершина непонимания для меня. Ну, ты ведь получил пинок, теперь есть куда рыть, так? ;)

Dreel 23.06.2008 17:01

Psycho Tiger, Спасибо дружище, пойду рыть ))

iNils 23.06.2008 19:04

Самый простой способ, это в двухмерном массиве менять индексы при движении, а потом сравнивать этот массив с "правильным"
Код:

this.lineStyle (0, 0, 0);
this.beginFill (0x666666);
this.moveTo (10, 10);
this.lineTo (140, 10);
this.lineTo (140, 140);
this.lineTo (10, 140);
this.lineTo (10, 10);
this.endFill ();
/*******************************************************************/
f = new TextFormat ("Verdana", 13, 0xFF6600, true);
f.align = "center";
/*******************************************************************/
init = function () {
        a = [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15, 0]];
        v = [[0,-1],[0,1],[-1,0],[1,0]]
        x = 3;
        y = 3;
        for (p = 1; p < 200;){
                r = random (4);
                i = x + v[r][0];
                j = y + v[r][1];
                if (a[i][j] and a[i][j]!= o) {
                        o = a[i][j];
                        a[i][j] = a[x][y];
                        a[x][y] = o;
                        x = i;
                        y = j;
                        p++;
                }
        }
        v = [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15, 0]];
        p = [[],[],[],[]];
        for (i = 0; i < 4; i++) {
                for (j = 0; j < 4; j++) {
                        p[i][j] = a[i][j];
                        if (a[i][j] != 0) {
                                createEmptyMovieClip ("m" + p[i][j], p[i][j]);
                                this["m" + p[i][j]].lineStyle (0, 0, 0);
                                this["m" + p[i][j]].beginFill (0x333333);
                                this["m" + p[i][j]].lineTo (30, 0);
                                this["m" + p[i][j]].lineTo (30, 30);
                                this["m" + p[i][j]].lineTo (0, 30);
                                this["m" + p[i][j]].lineTo (0, 0);
                                this["m" + p[i][j]].endFill ();
                                this["m" + p[i][j]].createTextField ("t", 0, 0, 3, 30, 30);
                                this["m" + p[i][j]].t.setNewTextFormat (f);
                                this["m" + p[i][j]].t.text = p[i][j];
                                this["m" + p[i][j]].i = i;
                                this["m" + p[i][j]].j = j;
                                this["m" + p[i][j]]._y = i * 32 + 12;
                                this["m" + p[i][j]]._x = j * 32 + 12;
                                this["m" + p[i][j]].onRelease = function () {
                                        if (p[this.i][this.j - 1] == 0) {
                                                this._x -= 32;
                                                o = p[this.i][this.j - 1];
                                                p[this.i][this.j - 1] = p[this.i][this.j];
                                                p[this.i][this.j] = o;
                                                this.j--;
                                        } else if (p[this.i][this.j + 1] == 0) {
                                                this._x += 32;
                                                o = p[this.i][this.j + 1];
                                                p[this.i][this.j + 1] = p[this.i][this.j];
                                                p[this.i][this.j] = o;
                                                this.j++;
                                        } else if (p[this.i - 1][this.j] == 0) {
                                                this._y -= 32;
                                                o = p[this.i - 1][this.j];
                                                p[this.i - 1][this.j] = p[this.i][this.j];
                                                p[this.i][this.j] = o;
                                                this.i--;
                                        } else if (p[this.i + 1][this.j] == 0) {
                                                this._y += 32;
                                                o = p[this.i + 1][this.j];
                                                p[this.i + 1][this.j] = p[this.i][this.j];
                                                p[this.i][this.j] = o;
                                                this.i++;
                                        }
                                        if (p.toString () == v.toString ()) {
                                                for (i = 0; i < 16; i++) {
                                                        _root["m" + i].removeMovieClip ();
                                                }
                                                _root.createTextField ("t", 100, 0, 60, 150, 25);
                                                _root.t.setNewTextFormat (f);
                                                _root.t.selectable = false;
                                                _root.t.text = "WIN";
                                                _root.onMouseUp = function () {
                                                        delete _root.onMouseUp;
                                                        _root.init ();
                                                };
                                        }
                                }
                        }
                }
        }
};
init ();

Синим отмечена проверка


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

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