C++ 无法将冲突检测调试矩形放置在游戏精灵上

C++ 无法将冲突检测调试矩形放置在游戏精灵上,c++,youtube,collision-detection,sdl-2,C++,Youtube,Collision Detection,Sdl 2,我一直在关注让我们在Youtube上制作一个RPG C++/SDL2-教程,我一直在关注让我们制作一个RPG C++/SDL2-关于碰撞的第35部分续集 我试图在所有精灵上放置一个透明矩形,以调试碰撞检测。我没有得到任何错误,所以没有一段代码我可以告诉你 谁能告诉我哪里出了问题吗。我对C++很陌生,但我不会放弃。谢谢你抽出时间。我真的很感激 这是冲突矩形的头文件和cpp文件的代码 这是精灵头文件和cpp文件的代码 究竟是什么问题?是否不显示矩形?如果我们不知道这个问题,很难帮上忙。但是使用SDL

我一直在关注让我们在Youtube上制作一个RPG C++/SDL2-教程,我一直在关注让我们制作一个RPG C++/SDL2-关于碰撞的第35部分续集

我试图在所有精灵上放置一个透明矩形,以调试碰撞检测。我没有得到任何错误,所以没有一段代码我可以告诉你

谁能告诉我哪里出了问题吗。我对C++很陌生,但我不会放弃。谢谢你抽出时间。我真的很感激

这是冲突矩形的头文件和cpp文件的代码

这是精灵头文件和cpp文件的代码


究竟是什么问题?是否不显示矩形?如果我们不知道这个问题,很难帮上忙。但是使用SDL_RenderDrawRect怎么样?如果没有关于问题所在的相关信息,除非出现奇迹,否则没有人能够帮助您。谢谢您的回复。问题是我想在所有精灵上放置一个透明矩形,以帮助创建碰撞检测。我的问题是所有的矩形都停留在屏幕的左上角。我没有错。代码就是做不到它应该做的。所有的代码都是从上面链接的youtube视频中截取下来的。他的作品,我的没有。再次感谢您的帮助。@alienfrenZy您正在为SDL_Rect设置值x、y、w、h;它是Sprite类的一个成员,您正在为它指定一个CollisionRectangle CollisionRect;但您从未为“CollisionRectangle CollisionRect;”设置x、y、w、h@alienfrenZy道歉是的,你看起来是。您的命名约定使某些变量使用大写字母命名,而其他变量则不使用大写字母命名,这可能会与方法混淆。你有没有办法在github上发布你的项目?
#include "CollisionRectangle.h"

CollisionRectangle::CollisionRectangle()
{
    OffsetX = 0;
    OffsetY = 0;
    SetRectangle(0,0,0,0);
}

CollisionRectangle::CollisionRectangle(int x, int y, int w, int h)
{

    OffsetX = x;
    OffsetY = y;
    SetRectangle(0,0,w,h);
}

CollisionRectangle::~CollisionRectangle()
{
    //dtor
}

void CollisionRectangle::SetRectangle(int x, int y, int w, int h)
{
    CollisionRect.x = x + OffsetY;
    CollisionRect.y = y + OffsetY;
    CollisionRect.w = w;
    CollisionRect.h = h;
}

//header
#pragma once
#include "stdafx.h"

class CollisionRectangle
{
    public:
        CollisionRectangle();
        CollisionRectangle(int x, int y, int w, int h);
        ~CollisionRectangle(void);

        void SetRectangle(int x, int y, int w, int h);

        SDL_Rect GetRectangle(){ return CollisionRect; }

        void setX(int x){ CollisionRect.x = x + OffsetX; }


        void setY(int y){ CollisionRect.y = y + OffsetY; }

    private:
        int OffsetX;
        int OffsetY;
        SDL_Rect CollisionRect;
};
#include "Sprite.h"

Sprite::Sprite(SDL_Renderer* passed_renderer, std::string FilePath, int x, int y, int     w, int h, float *passed_CameraX, float *passed_CameraY, CollisionRectangle passed_CollisionRect)
{
    CollisionRect = passed_CollisionRect;
    renderer = passed_renderer;

    CollisionSDL_Rect = CollisionRect.GetRectangle();

    image = NULL;
    image = IMG_LoadTexture(renderer, FilePath.c_str());

    if (image == NULL)
    {
        std::cout << "Couldn't load " << FilePath.c_str() << std::endl;
    }

    CollisionImage = NULL;
    CollisionImage = IMG_LoadTexture(renderer, "Data/DebugImages/DebugBox.png");

    if (CollisionImage == NULL)
    {
        std::cout << "Couldn't load " << "CollisionImage" << std::endl;
    }

    rect.x = x;
    rect.y = y;
    rect.w = w;
    rect.h = h;

    SDL_QueryTexture(image,NULL,NULL, &img_width, &img_height);

    crop.x = 0;
    crop.y = 0;
    crop.w = img_width;
    crop.h = img_height;

    X_pos = x;
    Y_pos = y;

    Origin_X = 0;
    Origin_Y = 0;

    CurrentFrame = 0;

    Amount_Frame_X = 0;
    Amount_Frame_Y = 0;


    CameraX = passed_CameraX;
    CameraY = passed_CameraY;
    Camera.x = rect.x + *CameraX;
    Camera.y = rect.y + *CameraY;
    Camera.w = rect.w;
    Camera.h = rect.h;
}

void Sprite::DrawSteady()
{
    SDL_RenderCopy(renderer,image, &crop, &rect);
}

void Sprite::Draw()
{


    Camera.x = rect.x + *CameraX;
    Camera.y = rect.y + *CameraY;

    CollisionRect.setX(rect.x + *CameraX);
    CollisionRect.setY(rect.y + *CameraY);

    SDL_RenderCopy(renderer,image, &crop, &Camera);

    SDL_RenderCopy(renderer,CollisionImage, NULL, &CollisionSDL_Rect);
}


void Sprite::SetUpAnimation(int passed_Amount_X, int passed_Amount_Y)
{
    Amount_Frame_X = passed_Amount_X;
    Amount_Frame_Y = passed_Amount_Y;
}

void Sprite::PlayAnimation(int BeginFrame, int EndFrame, int Row, float Speed)
{
    if (animationDelay+Speed < SDL_GetTicks())
    {
        if (EndFrame <= CurrentFrame)
            CurrentFrame = BeginFrame;
        else
            CurrentFrame++;

        crop.x = CurrentFrame * (img_width/Amount_Frame_X);
        crop.y = Row * (img_height/Amount_Frame_Y);
        crop.w = img_width/Amount_Frame_X;
        crop.h = img_height/Amount_Frame_Y;
        animationDelay = SDL_GetTicks();
    }
}

Sprite::~Sprite()
{
    SDL_DestroyTexture(image);
}

void Sprite::SetX(float X)
{
    X_pos = X;
    rect.x = int(X_pos - Origin_X);
}

void Sprite::SetY(float Y)
{
    Y_pos = Y;
    rect.y = int(Y_pos - Origin_Y);
}

void Sprite::SetPosition(float X, float Y)
{
     X_pos = X;
     Y_pos = Y;
    rect.x = int(X_pos - Origin_X);
    rect.y = int(Y_pos - Origin_Y);
}

float Sprite::getX()
{
    return X_pos;

}

float Sprite::getY()
{
    return Y_pos;
}

void Sprite::SetOrigin(float X, float Y)
{
    Origin_X = X;
    Origin_Y = Y;
    SetPosition(getX(),getY());
}

void Sprite::SetWidth(int W)
{
    rect.w = W;
}

void Sprite::SetHeight(int H)
{
    rect.h = H;
}

int Sprite::GetWidth()
{
   return rect.w;
}

int Sprite::GetHeight()
{
   return rect.h;
}

//header

#pragma once
#include "stdafx.h"
#include "SDL_Setup.h"
#include "CollisionRectangle.h"


class Sprite
{
    public:
    Sprite(SDL_Renderer* passed_renderer, std::string FilePath, int x, int y, int w, int h, float *CameraX, float *CameraY, CollisionRectangle passed_CollisionRect);
    ~Sprite();

    void Draw();
    void DrawSteady();

    void SetX(float X);
    void SetY(float Y);
    void SetPosition(float X, float Y);

    float getX();
    float getY();

    void SetOrigin(float X, float Y);

    int GetWidth();
    int GetHeight();

    void SetHeight(int H);
    void SetWidth(int W);

    void PlayAnimation(int BeginFrame, int EndFrame, int Row, float Speed);
    void SetUpAnimation(int passed_Amount_X, int passed_Amount_Y);


    private:
    CollisionRectangle CollisionRect;

    SDL_Rect Camera;
    SDL_Rect CollisionSDL_Rect;

    float *CameraX;
    float *CameraY;

    float Origin_X;
    float Origin_Y;
    float X_pos;
    float Y_pos;

    SDL_Texture* image;
    SDL_Texture* CollisionImage;

    SDL_Rect rect;
    SDL_Rect crop;
    SDL_Renderer* renderer;

    int img_width;
    int img_height;
    int CurrentFrame;
    int animationDelay;

    int Amount_Frame_X;
    int Amount_Frame_Y;
};