Тайловая карта и коллизия; застрять

Я пытаюсь заставить своего персонажа перемещаться по тайловой карте со столкновениями. Все работает нормально, кроме одного. Показываю картинку с проблемой:

http://i.imgur.com/bcyz5.jpgТо есть, когда я дохожу до плитки выше, я не может никуда двигаться. Если вы идете слева, я не могу двигаться ни вверх, ни вниз. Если вы дойдете до дна, я могу двигаться влево, но не вправо. И когда вы дойдете вправо, я могу двигаться в любом направлении.

Честно говоря, я понятия не имею, что может быть не так. Я думаю, это связано с if (...), потому что, если я изменю порядок, адреса, по которым я могу переместить, изменятся: /

Здесь я оставляю код:

boolean collision = false;

if(Keyboard.isKeyDown(Keyboard.KEY_UP)) {
    for(int i = 0; i < map.GetNumLayers(); i++) {
        if(UpTile(map, i) > 128) {
            collision = true;
        }
    }

    if(!collision) AddPos(0.0f, -vel);
}
if(Keyboard.isKeyDown(Keyboard.KEY_LEFT)) {
    for(int i = 0; i < map.GetNumLayers(); i++) {
        if(LeftTile(map, i) > 128) {
            collision = true;
        }
    }

    if(!collision) AddPos(-vel, 0.0f);
}
if(Keyboard.isKeyDown(Keyboard.KEY_DOWN)) {
    for(int i = 0; i < map.GetNumLayers(); i++) {
        if(DownTile(map, i) > 128) {
            collision = true;
        }
    }

    if(!collision) AddPos(0.0f, vel);
}
if(Keyboard.isKeyDown(Keyboard.KEY_RIGHT)) {
    for(int i = 0; i < map.GetNumLayers(); i++) {
        if(RightTile(map, i) > 128) {
            collision = true;
        }
    }

    if(!collision) AddPos(vel, 0.0f);
}

person Puyover    schedule 03.07.2011    source источник


Ответы (1)


Вам будет проще отделить модель вашей игры от вида, показанного выше. В этом примере показан один подход, в то время как этот более сложный example моделирует связанную игру на основе сетки.

person trashgod    schedule 03.07.2011