【问题标题】:trying to call class function character.Draw(buffer)试图调用类函数 character.Draw(buffer)
【发布时间】:2015-08-20 22:31:01
【问题描述】:

我目前正在做一个项目,并试图通过 Character.Draw(Buffer) 的类函数将 draw_sprite(example.bmp,NULL) 绘制到屏幕上。 它不断崩溃,想知道为什么它不起作用。当我不使用类函数时它可以工作。

        //Character.cpp
    #include "Character.h"
const int scrx = 640;
const int scry = 480;

    Character::Character(){

x = 10;
y = 10;
velx = 0;
movespeed = 5;
    gun = load_bitmap("gun.bmp",NULL);

     }

    void Character::Draw(BITMAP * buff){
draw_sprite(buff, gun, 10,10);
 }


     //Character.h

     #ifndef CHARACTER_H
     #define CHARACTER_H


     #include <allegro.h>

     class Character{

     public:
        Character();

   ~Character();


         void Draw(BITMAP *buff);
     private:
     BITMAP * gun;


     };

    //main.cpp
         #include <allegro.h>
         #include "Character.h"
          using namespace std;

          Character character;

          int main()
           {

allegro_init();
install_keyboard();


set_gfx_mode(GFX_AUTODETECT_WINDOWED, scrx, scry, 0, 0);



    while(! key[KEY_ESC])
    {

        switch (select)
        {
              case 0:
                ...

        case 2:

            clear_bitmap(buffer);
            character.Draw(buffer);

这是失败的地方,如果我不使用类函数来绘制。只需输入 Draw_Sprite(example) 即可。

【问题讨论】:

  • 使用调试器。学习调试器。然后告诉我们哪些陈述导致了问题;预期输出或结果和实际输出或结果。不要忘记给我们输入数据。请记住,使用信息编辑您的帖子;不要放入 cmets。

标签: c++ allegro


【解决方案1】:

你的 Character 对象是一个全局对象,它在你启动 main 函数之前被初始化。它的构造函数将尝试调用 load_bitmap 函数,但在 main 函数执行之前您不会调用 allegro_init ,因此图像加载可能会失败。您可以通过在调用 allegro_init 后声明 Character 对象来解决此问题。还要确保向您尝试加载的资源添加验证,以确保它们已正确加载。

【讨论】:

  • 这对您很有帮助,谢谢,现在我遇到了一个问题,即精灵在屏幕上出现故障,缺少更好的词,并且精灵本身被加载为蓝色方块而不是它的 bmp可以像没有字符类一样加载。
猜你喜欢
  • 2023-03-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-07
  • 2012-08-28
  • 1970-01-01
相关资源
最近更新 更多