Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使对象在SDL中独立移动(如枪弹)_C++_Sdl - Fatal编程技术网

C++ 使对象在SDL中独立移动(如枪弹)

C++ 使对象在SDL中独立移动(如枪弹),c++,sdl,C++,Sdl,我一直在关注关于SDL的lazyfoos教程,我对他的代码进行了大量修改,使之成为一款可以移动的飞船游戏。我正试图让飞船射击,但我完全不知道该怎么做。我有飞船和它的运动,以及图像在课堂上的实际应用,我想知道是否有人有任何技术或某些方法可以有效地使飞船拍摄,使拍摄独立移动,然后在离开屏幕时消失。我知道我给出了一个模糊的解释,但是我不想给出所有的答案,只是一个小样本代码和一个正确的方向。< /P> < P>我绝对可以推荐,它使用C++和SDL。< /P> < P>创建一个类来持有一个弹丸,里面有你需

我一直在关注关于SDL的lazyfoos教程,我对他的代码进行了大量修改,使之成为一款可以移动的飞船游戏。我正试图让飞船射击,但我完全不知道该怎么做。我有飞船和它的运动,以及图像在课堂上的实际应用,我想知道是否有人有任何技术或某些方法可以有效地使飞船拍摄,使拍摄独立移动,然后在离开屏幕时消失。我知道我给出了一个模糊的解释,但是我不想给出所有的答案,只是一个小样本代码和一个正确的方向。< /P> < P>我绝对可以推荐,它使用C++和SDL。< /P> < P>创建一个类来持有一个弹丸,里面有你需要的所有信息,比如:

struct Projectile
{
    Vector2 position;
    Vector2 velocity;
    shared_ptr<Image> graphic;
    Time time_until_my_destruction;
    bool dead;

    void update(Time time_delta) {
        if(!dead) {
            position += velocity * time_delta;
            time_until_my_destruction -= time_delta;
            if(time_until_my_destruction < 0.0) dead = true;
        }
    }

    void draw(DrawDest & dest) const {
        graphic->draw(dest, position);
    }

    bool checkCollision(const GameObject & object) const {
        return object.area().contains(position);
    }
};
struct抛射体
{
矢量2位置;
矢量2速度;
共享ptr图形;
时间直到我的毁灭;
布尔死了;
无效更新(时间增量){
如果(!死了){
位置+=速度*时间_δ;
时间直到我的毁灭-=时间增量;
如果(直到销毁的时间<0.0)死亡=真;
}
}
无效提取(提取目的地和目的地)常数{
图形->绘图(目的地、位置);
}
布尔检查碰撞(常量游戏对象和对象)常量{
返回object.area().contains(位置);
}
};
这个类显然不完整,您可能需要对访问级别进行调整,并编写一些构造函数和其他内容,但它应该能为您提供基本的想法


做一个容器。当船着火时,把一个放进集装箱里。每一帧,调用更新、绘制、检查投射物是否死亡以及检查是否与游戏对象发生碰撞。如果发生碰撞,则进行损坏或其他处理。如果物体死了,就把它从容器里拿出来。

问题是,我无法得到飞船的位置,这是它自己的独立等级,我需要它,这样我至少可以让它看起来像是从容器里射出来的ship@Stan:为什么不能添加函数
getPosition()
到飞船的类?另一种选择是让飞船自己生成射弹,使用它自己的位置作为起始位置,这从面向对象编程的角度来看非常有意义,因为这正是现实生活中会发生的事情。你的飞船应该创建所有射弹,并且您的sparket类应该有一个静态方法,如:sparket::New(Position,Velocity);然后在您的ship类中有一个Fire方法或类似方法,该方法调用Sprojection::New传递其位置和速度。@MetaCipher:不确定为什么需要静态方法。只要用这些参数构造一个构造函数。