Форум 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=139243)

TaNda 26.04.2010 15:54

Как обратиться к элементам простого массива?
 
Проблема такая: создаю массив с элементами (для игры пятнашки). А как обратиться к ним по-человечески не понимаю. Просто [tileArr] (как в коде пока написано у меня) - получается не к каждому, а к списку элементов обращение, да? По книжке что-то не разобраться... Накрутила, навертела чего-то, и не работает(
Помогите если не сложно =)

Код AS1/AS2:

var tileArr:Array = ["tile1", "tile2", "tile3", "tile4", "tile5", "tile6", "tile7", "tile8", "tile9", "tile10", "tile11", "tile12", "tile13", "tile14", "tile15"];
 
function initGame()
{
        tileDist = 54;
        for (x=1; x<=4; x++)
        {
                for (y=0; y<=3; y++)
                {
 
                        _root[tileArr]._x = x*tileDist+500;
                        _root[tileArr]._y = 400+y*tileDist+tileDist;
                }
        }
        for (tilenum = 0; tilenum<100; tilenum++)
        {
                do
                {
 
                        tile = [tileArr];
                        emptySpace = findEmpty(tile);
                }
                while (emptySpace == "none");
                moveTile (tile, findEmpty(tile));
        }
}
 
function findEmpty(tile)
{
        tilex = _root[tile]._x;
        tiley = _root[tile]._y;
        if (tilex>tileDist+500)
        {
                if (!tileThere(tilex-tileDist, tiley))
                {
                        return ("left");
                }
        }
        if (tilex<500+tileDist*4)
        {
                if (!tileThere(tilex+tileDist, tiley))
                {
                        return ("right");
                }
        }
        if (tiley>tileDist+400)
        {
                if (!tileThere(tilex, tiley-tileDist))
                {
                        return ("above");
                }
        }
        if (tiley<400+tileDist*4)
        {
                if (!tileThere(tilex, tiley+tileDist))
                {
                        return ("below");
                }
        }
        return ("none");
}
function tileThere (thisx, thisy)
{
        for (i=1; i<tileArr.length; i++)
        {
                if (_root[tileArr[i]]._x == thisx)
                {
                        if (_root[tileArr[i]]._y == thisy)
                        {
                                return true;
                        }
                }
        }
        return false;
}
function moveTile(tile, direction)
{
        if(direction == "above")
        {
                _root[tile]._y -= tileDist;
        }
        else if (direction == "below")
        {
                _root[tile]._y += tileDist;
        }
        else if (direction == "left")
        {
                _root[tile]._x -= tileDist;
        }
        else if (direction == "right")
        {
                _root[tile]._x += tileDist;
        }
}
function tileUnderMouse()
{
        for (i=1; i<tileArr.length; i++)
        {
                if (_root[tileArr[i]].hitTest(_xmouse, _ymouse))
                {
                        return (i);
                }
        }
}


lexa2000lexa 26.04.2010 16:05

если я правильно понял вас ,то нужно вам обрашаться вот так
Код AS1/AS2:

tileArr[некий номер]._x = некое значение


TaNda 26.04.2010 16:20

Нет, нужно, чтоб программа обращалась поочереди к каждому элементу массива, а не только к одному конкретному.

Есть мысль использовать цикл for, в коде ниже я так и сделала - это правильно? Неужели каждое обращение к элементам нужно прописывать через очередное for и скобки? Это ж помойка в коде будет..
Код AS1/AS2:

function tileUnderMouse()
{
        for (i=1; i<tileArr.length; i++)
        {
                if (_root[tileArr[i]].hitTest(_xmouse, _ymouse))
                {
                        return (i);
                }
        }
}


fessor 26.04.2010 16:41

может проще использовать mc.onRollover = function(){}
и мороки меньше и всегда знаешь на каком тайле мышь

TaNda 26.04.2010 16:57

это в функции для каждого из 15 элементов прописывать всю массу кода? Наверное, я не поняла) ааа:wacko:

Так то все работает и без массива, но не реализовать проверку на решенность головоломки ибо запутано очень. Хочется избавиться от постоянных вычислений номера элемента и просто производить все действия с элементами массива.

lexa2000lexa 26.04.2010 17:02

зачем, это делаеться вот так
Код AS1/AS2:

var tileArr:Array = [tile1, tile2, tile3, ....]
for(var i:Number = 0;i<tileArr.length;i++){
        tileArr[i].onRollOver = function(){
                trace(this)
        }
}


TaNda 26.04.2010 18:21

Спасибо, ребят) Буду пробовать...но походу, если весь код не перелопатить, не заработает..там все на другом принципе ща


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

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