太空侵略者--2D向量移动算法

问题描述 投票:0回答:1

我正在用C++语言(使用MBed平台)为一个微控制器构建太空入侵者。我使用了一个2D Vector的对象指针来组织入侵者。

运动算法如下,在游戏的主while循环中运行。基本上,我得到了向量中入侵者的X和Y的最高值,并使用这些值来设置基于屏幕大小的边界(HEIGHT变量)。

我还得到了第一个入侵者的位置、速度和宽度,我根据上面的边界对其进行了修改。

然后我再次遍历整个向量,并应用所有这些变化。它有点工作--入侵者移动了--但边界似乎没有生效,所以他们飞出了屏幕。我觉得我好像漏掉了什么很愚蠢的东西,先谢谢你了。

void Army::move_army() {   
    int maxy = HEIGHT - 20;

    int Ymost = 0; // BOTTOM
    int Yleast = 100; // TOP
    int Xmost = 0; // LEFT
    int Xleast = 100; // RIGHT

    int first_row = _rows;
    int first_column = _columns;
    int firstWidth = 0;
    Vector2D firstPos;
    Vector2D firstVel;

    for (int i = 0; i < _rows; i++) {
        for (int n = 0; n < _columns; n++) {
            bool state = invaders[i][n]->get_death();
            if (!state) {
                if (i < first_row && n < first_column) {
                    firstPos = invaders[i][n]->get_pos();
                    firstVel = invaders[i][n]->get_velocity();
                    firstWidth = invaders[i][n]->get_width();
                    }

                Vector2D pos = invaders[i][n]->get_pos();
                if (pos.y > Ymost) {Ymost = pos.y;} // BOTTOM
                else if (pos.y < Yleast) {Yleast = pos.y;} // TOP
                else if (pos.x > Xmost) {Xmost = pos.x;} // LEFT
                else if (pos.x < Xleast) {Xleast = pos.x;} // RIGHT

                }
            } 
        }

    firstVel.y = 0;

    if (Xmost >= (WIDTH - 8) || Xleast <= 2) {
        firstVel.x = -firstVel.x;
        firstPos.y += _inc;

        // reverse x velocity
        // increment y position
        }
    else if (Ymost > maxy) {
        _inc = -_inc;
        // reverse increment
        }
    else if (Yleast < 2) {
        _inc = -_inc;
        // reverse increment
        }

    for (int i = 0; i < _rows; i++) {
        int setx = firstPos.x;
        if (i > 0) {firstPos.y += 9;}
        for (int n = 0; n < _columns; n++) {
            invaders[i][n]->set_velocity(firstVel);
            invaders[i][n]->set_pos(setx,firstPos.y);
            setx += firstWidth + 2; 
            }
        }
c++ mbed
1个回答
0
投票

看来你的赋值情况是颠倒的。赋值总是:右<-左,所以在第一种情况下,你改变的是YMost的值,而不是pos.y.看起来如果你在你的bounds检查中交换这四个赋值,它应该工作。祝您好运!

© www.soinside.com 2019 - 2024. All rights reserved.