-1

好吧,我马上道歉,因为代码实际上有点大。问题是,我正在与 SDL 合作,实际上是在学习。我已经设法创建动画,但我决定我想更深入一点。这就是代码的工作方式

App - 用途:这里有主循环,Init 函数,Render 函数,整个软件都源自这里。

动画 - 用途:这将包含并声明动画类中的所有功能。它仅在名为 Running 的布尔变量为 true 时才有效。

Surface - 用途:这会将文件加载到表面上,使某些颜色透明并将图像或部分图像绘制到 MainSurface 上。

事件 - 用途:这具有事件的所有虚拟功能

对象 - 用途:这是重要的部分。它工作得很好。在我在主类上拥有一个名为 Yoshi 的 Surface 之前,我将使用该 Surface 与动画进行交互。我认为在主类上显示“字符”的方法有点令人困惑,当屏幕上有多个图像时会引起问题。因此,我决定创建一个名为 Object 的类,它有自己的 SDL_Surface,它自己在屏幕上的位置,它自己的变量决定了它是哪一帧。我所做的是我在 APP 类上为这个类创建了一个对象......就像

Object MainCharacter;

因此,我将能够单独操纵该角色,如果我需要在屏幕上显示另一个对象,我会使用

Object *SecondCharacter;

等等......那么对象类将调用动画。APP 类将通过类似这样的函数渲染所有图像

MySurface::OnDraw(Surf_Display, MainCharacter.Img_Surface, MainCharacter.RetrievePosX(), MainCharacter.RetrievePosY(), MainCharacter.RetrieveFrameByID(0), MainCharacter.RetrieveFrameByID(1), 64, 64);

嗯......但问题是:代码停止工作。这远不是一个完成的代码,但我想马上解决这个问题,所以我只能在它已经有了一个基础之后才能完成。

以下是所有文件: 其中一些文件的行数不多。我还写了一些评论来帮助任何能够帮助我的人。


标题:

Animation.h - http://pastebin.com/v4REcmBd

Object.h - http://pastebin.com/KdeamZTG

Events.h - http://pastebin.com/dpQ7zwpG

CApp.h - http://pastebin.com/5zZYwDjv

Surface.h - http://pastebin.com/S66ChQ3f


来源:

Surface.cpp - http://pastebin.com/KRgAkHpw

Object.cpp - http://pastebin.com/RtDRwVj4

Events.cpp - http://pastebin.com/dpXn8Rh3

OnRender.cpp - http://pastebin.com/AqgMTacb

OnLoop.cpp - http://pastebin.com/UAeAt7y6

OnInit.cpp - http://pastebin.com/1iiZVeyK

OnEvent.cpp - http://pastebin.com/AjRXnKC1

OnCleanUp.cpp - http://pastebin.com/cv0M11nV

CApp.cpp - http://pastebin.com/L0jhfWY8

Animation.cpp - http://pastebin.com/0BZhh6TG


好吧,就是这些。其中一些真的很短。好吧,如果有人可以帮助我找出我的错误在哪里,我会很高兴。除此之外,我真的很想对软件的结构发表意见,你认为我在做什么实用吗?您在创建 SDL 软件或游戏时使用什么设计???

4

1 回答 1

1

在评论中被告知它发生在 Source.cpp 的第 12 行,它说

Res = SDL_DisplayFormat(Temp);

并为您搜索了 SDL_DisplayFormat,我找到了此手册页

在底部附近它说:

新手提示

在使用 SDL_DisplayFormat 函数之前,您必须调用 SDL_Init。否则,您的程序将因访问冲突而崩溃。

于 2013-07-26T16:24:06.943 回答