life_hell 2024-10-23 18:43 采纳率: 80%
浏览 3
已结题

easy库绘制图片失败

学easyx库,结果绘制图片不成功。反复改过,图片路径也没错,就是无法绘制,上一个项目还能行来着。


#pragma once
#include <stdio.h>
#include <graphics.h>


class Scene
{
private:
    Scene() = default;
    Scene(Scene&) = default;
public:
    static Scene* create()
    {
        Scene* scene = new Scene;
        if(scene->init())
        {
            return scene;
        }
        delete scene;
        return nullptr;
    }
public:
bool init()
{
    
    loadimage(&ing_background, _T("img/ground.png"));
    return true;
}
void drawTick()
{
    
    putimage(0, 0, &ing_background);
}
void evenTick(float delta);

private:
    IMAGE ing_background;
};
#include <graphics.h>
#include <ctime>
#include <string>
#include "./class/scene.h"

int main()
{
    initgraph(1024,700);

    Scene* scene = Scene::create();

    const bool running = true;

    float fps = 1000.0f / 60;
    clock_t begin_time = clock(),end_time = 0;
    while (1)
    {
        end_time = clock();
        if (float(end_time - begin_time) >= fps)
        {
            scene->drawTick();
            //scene->evenTick(float(end_time - begin_time));
        }
        begin_time = end_time;
    }
    return 0;
}

  • 写回答

1条回答 默认 最新

  • 无疆76 2024-10-23 18:44
    关注

    以下回复参考:皆我百晓生券券喵儿等免费微信小程序作答:

    你的问题看起来是在使用EasyX库进行图像绘制时遇到了问题。首先,请确保以下几点:

    1. 确保你的图片路径是正确的。检查图片是否存在于指定的路径下,并且文件名和扩展名是否正确。注意路径中的大小写和空格。如果图片在程序运行的同一目录下,你可以直接使用文件名。否则,你需要提供完整的路径。
    2. 确保你的图片格式是EasyX支持的。EasyX支持的图片格式包括PNG,JPG等。尝试使用其他格式的图片看看是否可以正常显示。
    3. 检查你的程序是否有足够的权限访问文件。在某些情况下,程序可能因为权限问题无法读取文件。
    4. 检查你的EasyX库版本是否是最新的,或者是否与你的编译器兼容。有时候,旧版本的库可能会出现一些已知的问题。尝试更新你的EasyX库看看问题是否解决。

    如果这些都没问题,那么问题可能出在你的代码上。在你的代码中,Scene类的构造函数是私有的,并且没有公开的构造函数供外部调用。因此,在Scene::create()函数中创建Scene对象可能会失败,因为无法正确初始化ing_background成员变量。你需要提供一个公开的构造函数或者提供一个静态方法来初始化并返回Scene对象。此外,确保在调用loadimage函数之前已经成功初始化了图形设备(initgraph)。如果在图形设备初始化之前就尝试加载图像,可能会导致加载失败。另外,如果图像加载失败,EasyX库可能并不会给出明确的错误信息,你需要通过其他方式(如检查返回值)来判断图像是否成功加载。

    以下是一个修改后的Scene类的例子:

    #pragma once
    #include <graphics.h>
    
    class Scene {
    public:
        Scene() {
            // 在构造函数中初始化图像
            if (loadimage(&ing_background, _T("img/ground.png"))) {
                // 图像加载成功
            } else {
                // 图像加载失败,处理错误情况
            }
        }
        void drawTick() {
            putimage(0, 0, &ing_background);
        }
        void evenTick(float delta) {}  // 实现你的逻辑
    private:
        IMAGE ing_background;
    };
    

    然后你可以直接创建Scene对象:

    Scene scene;  // 在main函数中创建Scene对象
    scene.drawTick();  // 调用drawTick函数绘制图像
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 10月31日
  • 已采纳回答 10月23日
  • 创建了问题 10月23日