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

Alexey25 30.07.2016 04:10

Перемещение игрока по шестигранному полю
 
Вложений: 3
Пытаюсь сделать перемещение игрока по полю состоящий из шестигранных тайлов. Пользователь щелкает по полю и персонаж должен сдвигаться на один тайл в сторону щелчка. За каждый щелчок персонаж сдвигается и так до тех пор пока не достигнет своей цели. Персонаж при движении должен попасть в центр каждого тайла. Вот как примерно должно быть.

Вложение 32273

А вот как у меня получилось для наглядности я нарисовал кружки где при каждом щелчке располагается персонаж.

Вложение 32274

Вообщем игрок должен добраться до пункта назначения попадая именно не на пересечения, а в центр каждого тайла. Далее следует сам код, помогите пожалуйста исправить код, а то игрок попадает на пересечение при перемещении.

Код AS1/AS2:

var move = 0;
function hex_tile()
{
        emx = 5;
        emy = 5;
        for(var i = 0; i < 7; i++)
        {
                for(var j = 0; j < 7; j++)
                {
 
                        clip["h_"+i+"_"+j].onPress = onP;
                }
        }
        clip.attachMovie("enemy", "enemy",clip.getNextHighestDepth());
        clip["enemy"]._x = emx * 60 + 30 * (emy % 2);
        clip["enemy"]._y = 30 * emy;
 
        _root.onEnterFrame = function ()
        {
                var enemy = clip["enemy"];
                enemy.xt = Math.floor(enemy._x / 60);
                enemy.yt = Math.floor(enemy._y / 30);
 
                if(move == 1)
                {
                        if(tilex < clip["enemy"]._x)
                        {
                                if(ex - 60 + 30 * (enemy.yt % 2) !=  clip["enemy"]._x)
                                {
                                        clip["enemy"]._x -= 5;
                                }
                        }
                        if(tilex > clip["enemy"]._x)
                        {
                                if(ex + 60 + 30 * (enemy.yt % 2) !=  clip["enemy"]._x)
                                {
                                        clip["enemy"]._x += 5;
                                }
                        }
                        if(tiley < clip["enemy"]._y)
                        {
                                if(ey - 30 !=  clip["enemy"]._y)
                                {
                                        clip["enemy"]._y -= 5;
                                }
                        }
 
                        if(tiley > clip["enemy"]._y)
                        {
                                if(ey + 30 !=  clip["enemy"]._y)
                                {
                                        clip["enemy"]._y += 5;
                                }
                        }
 
                }
        }
 
}
 
function onP()
{
        move = 1;
        tilex = this._x;
        tiley = this._y;
        ex = clip["enemy"]._x;
        ey = clip["enemy"]._y;
 
}
hex_tile();

На всякий случай вот еще исходники.
Вложение 32275

dark256 30.07.2016 19:51

Вложений: 3
Попробую помочь в решении проблемы без кодинга и даже без слов ;)

Вложение 32277
Вложение 32278
Вложение 32279

dark256 30.07.2016 19:52

Не то наскриншотил...
Лень переделывать. Короче. Крестик - это ЦЕНТР клипа. Откройте ваш клип с гексом и отцентрируйте его.

Alexey25 31.07.2016 12:42

Вообще то у меня они уже и так в центре находятся.
http://vagon-igr.ru/img/31-07-2016/hex.jpg

dark256 01.08.2016 21:43

Вообще-то тогда исходник имело бы смысл выложить.

EndoCrinologist 23.08.2016 17:13

Вложений: 1
Есть только идея - искать ближайшие перпендикулярные центры гексагонов, через которые проходит красная линия


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

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