我正在尝试释放一堆不同类型的东西,所以我认为我可以通过将它们添加到一堆void *单元格中使用一个函数来释放所有它们。
我的问题是:保存SDL_Surface*asvoid *并使用该free()函数而不需要是否安全SDL_FreeSurface()?
如何设置SDL在C中工作?我的意思是没有类,纯C语言.我在C中看到很少使用SDL的项目,但是当我尝试设置或下载时,只有C++版本.您能否指导我如何在Mac(Xcode)或Windows环境中安装SDL for C?
编辑:我知道SDL是用C语言编写的,但它并没有使它成为C库.第一个教程(以及我检查过的所有其他课程都大量使用类.第一个来自网站上的教程部分,在第二页上使用类代码.http://www.sdltutorials.com/sdl-tutorial-basics
LazyFoo教程虽然陈旧,但它们也使用c ++.
你能把我链接到使用C的教程吗?
我正在使用这个基本的sdl程序来学习打印屏幕.
运行应用程序时出现以下错误:
错误:'='标记之前的预期主表达式"
#include "SDL.h"
#include <stdio.h>
#define window
using namespace std;
const int SCREEN_WIDTH = 640;
const int SCREEN_HEIGHT = 480;
int main( int argc, char* args[] )
{
SDL_Surface* screenSurface =NULL;
if( SDL_Init( SDL_INIT_VIDEO ) < 0 )
{
printf( "SDL could not initialize! SDL_Error: %s\n",SDL_GetError() );
}
else
{
window = SDL_CreateWindow( "SDL Tutorial", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, SCREEN_WIDTH, SCREEN_HEIGHT, SDL_WINDOW_SHOWN );
}
if(window==NULL)
{
window = SDL_CreateWindow( "SDL Tutorial", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, SCREEN_WIDTH, SCREEN_HEIGHT, SDL_WINDOW_SHOWN );
} …Run Code Online (Sandbox Code Playgroud) 我只是试图使用sin,cos和sqrt功能,但我不断收到错误消息“在此范围内没有宣布”。我已经查看了错误的所有搜索结果,并且 1. 编码人员正在使用终端来编译他们的代码(而不是我正在使用的 CodeBlocks) 2. 我已经尝试使用cmath,添加using namespace std和使用绝对路径。我越来越沮丧。
#ifndef _MATH_H
#define _MATH_H
#include </usr/include/math.h>
#define PI 3.14159265
#define DEG_TO_RAD PI / 180.0f
struct Vector2
{
float x;
float y;
Vector2(float _x = 0.0f, float _y = 0.0f)
: x(_x), y(_y) {}
float MagnitudeSqr()
{
return x*x + y*y;
}
float Magnitude()
{
return (float)sqrt(x*x + y*y);
}
Vector2 Normalized()
{
float mag = Magnitude();
return Vector2(x/ mag, y /mag);
} …Run Code Online (Sandbox Code Playgroud) 我必须使用SDL库在ANSI C中编写Tower Defense游戏,但是我深入研究LazyFoo的教程,我越觉得由于局限性而无法在纯C中编写它.所以我的问题是 - 我遇到了大麻烦,或者我只是恐慌.它必须是一个简单的塔防游戏,没有什么花哨的,但它是否可以只使用C?
我收到错误"分配抽象类类型'MainGame的对象",即使已经实现了所有虚函数.以下是相关代码段:
main.cpp中
#include "Gamestate_MainGame.h"
int main() {
Game game;
if (game.init(new MainGame))
game.loop();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
Gamestate.h
#ifndef Gamestate_h
#define Gamestate_h
#include <SDL2/SDL.h>
#include "Game.h"
class GameState {
public:
virtual bool init(Graphics* graphics, Game* game) = 0;
virtual void quit() = 0;
virtual void handleEvents(SDL_Event* e) = 0;
virtual void logic() = 0;
virtual void render() = 0;
protected:
Game* game = NULL;
Graphics* graphics = NULL;
};
#endif
Run Code Online (Sandbox Code Playgroud)
Gamestate_MainGame.h
#ifndef Gamestate_MainGame_h
#define Gamestate_MainGame_h
#include <vector>
#include <SDL2_mixer/SDL_mixer.h>
#include "Gamestate.h" …Run Code Online (Sandbox Code Playgroud) 我正在学习C,对C++一无所知.使用C++的LazyFoo的SDL2教程做了一个我不理解的双冒号的东西,因此无法在C中跟随.
如果有帮助,这里是教程的链接:
http://lazyfoo.net/tutorials/SDL/04_key_presses/index.php
SDL_Surface *loadSurface( std::string path )
{
//Load image at specified path
SDL_Surface *loadedSurface = SDL_LoadBMP( path.c_str());
if( loadedSurface == NULL )
{
printf("Unable to load image %s! SDL Error: %s\n", path.c_str(), SDL_GetError());
}
return loadedSurface:
}
Run Code Online (Sandbox Code Playgroud)
除了函数参数和LoadBMP参数之外,这里的所有内容都对我有意义.我不知道是什么::意思,我不知道path.c_str()是指什么.
请问,有人可以用在C语言中有意义的方式解释它,或者建议只使用C语言的解决方法吗?