在C ++中计算精灵的坐标

时间:2010-10-16 09:00:44

标签: c++ sprite game-physics trigonometry

我正在尝试用C ++计算精灵的移动角度。

虽然目前我只是使用控制台输出结果。

我的问题是,当我的结果显示在控制台中时,我无法让x轴进入负号。

不幸的是,我刚刚学会了基本的触发,所以我不知道我是不是只是把数学做错了。

例如:如果我选择我的角度为270而我的速度为1,则当我认为它应该是(-1,0)时控制台将新坐标显示为(1,-1)

同样,如果我将角度设为-90,速度设为1,则得到(0,-1)

只是x不能进入负数吗?

或者我犯了一个根本性的错误?

我的代码如下 - 所以,如果有人能指出我做错了什么,我们将不胜感激。

#include <iostream>
#include <cmath>

using namespace std;

const float PI = 3.14159265;

class sprite {
    public:
        int x;
        int y;
        int angle;
        int speed;
        sprite();
};

sprite::sprite() {
    x = 0;
    y = 0;
    angle = 0;
    speed = 0;
}

int main() {
    int userInput = 0;
    sprite mySprite;

    cout << "Starting co-ordinates: (" << mySprite.x << "," << mySprite.y << ")\n\n";

    while(userInput != 999) {
        cout << "Angle to move: ";
        cin >> userInput;
        mySprite.angle = userInput;

        cout << "Speed to move at: ";
        cin >> userInput;
        mySprite.speed = userInput;

        mySprite.x += ceil(cos(mySprite.angle*PI/180)*mySprite.speed);
        mySprite.y += ceil(sin(mySprite.angle*PI/180)*mySprite.speed);

        cout << "\n\n";
        cout << "New co-ordinates: (" << mySprite.x << "," << mySprite.y << ")\n\n";
    }

    return 0;
}

2 个答案:

答案 0 :(得分:3)

更改为:

    mySprite.x += floor(cos(mySprite.angle*PI/180)*mySprite.speed + 0.5);
    mySprite.y += floor(sin(mySprite.angle*PI/180)*mySprite.speed + 0.5);

阅读this(或您喜欢的任何其他指南)以了解原因。

答案 1 :(得分:1)

首先,你应该期待的答案是(0,-1),而不是(-1,0)(0是对,90是向上,180是剩下,270是向下)。得到(1,-1)的原因是因为浮点的限制意味着你的cossin结果是(1e-8,-1)。然后你取这些ceil,它们是(1,-1)。你可能想要围绕而不是采取上限。