Questions tagged «sdl»

简单DirectMedia层(SDL)是一个跨平台的多媒体库,旨在通过OpenGL和2D视频帧缓冲区提供对音频,键盘,鼠标,操纵杆,3D硬件的低级访问。

8
与软件渲染相比,OpenGL,SFML和SDL有什么优势?
我开始观看Handmade Hero系列视频,其中Casey Muratori在不使用框架等的情况下创建了一个游戏引擎。昨天我到了那儿,他展示了如何在屏幕上绘制图像。据我了解,他只是分配了一些内存,该内存与他要绘制的屏幕大小一样大。然后,他创建了一个位图,然后将其传递到分配的缓冲存储器中,并使用特定于操作系统的功能将其绘制到屏幕上。 这似乎很简单。我曾经使用GameMaker,后来改为Love2D,并与Sprite Kit一起工作了一些,但我一直想知道在有时令人困惑的图层下到底发生了什么。 既然如此,为什么当您只需要分配一些缓冲区,传递位图并将其绘制到屏幕上时,为什么还要使用图形库(OpenGL,SFML,SDL等)呢? 如果要在屏幕上绘制不同的内容,只需将它们写入位图,然后将其传递到缓冲区中。我对编程很陌生,但这对我来说似乎很简单。如果我错了,请纠正我。

3
多平台多线程:真正的挑战是什么?
尽管像SDL这样的库提供了用于线程的跨平台包装器API,但我认为天真地假设这直接导致了在非常不同的平台(台式机/移动设备)上轻松开发游戏的想法。 考虑以下因素,解决这种问题的最佳方法是什么(考虑到任何跨平台线程API): 不同数量的核心 每个内核的处理能力大不相同 总体上不同的系统架构,例如 缓存,RAM和I / O访问的不同延迟 我觉得这样做的唯一方法是评估您打算支持的每个设备可以运行多少个线程,并找出最低的公分母。但是,这仍然使我对可用的处理吞吐量总量一无所知。我是否认为有效地做到这一点的唯一方法是在整个开发过程中积极开发我打算支持的最低规格的移动设备?-即最低公分母?这大概足够了吗?还是比这还更多? 编辑:请其他人对此提供进一步的经验,因为我还没有完全回答我的问题。

2
大型游戏中的输入管理技术
是否有用于管理大型游戏中输入的标准技术。当前,在我的项目中,所有输入处理都在游戏循环中完成,如下所示: while(SDL_PollEvent(&event)){ switch(event.type){ case SDL_QUIT: exit = 1; break; case SDL_KEYDOWN: switch(event.key.keysym.sym){ case SDLK_c: //do stuff break; } break; case SDL_MOUSEBUTTONDOWN: switch(event.button.button){ case SDL_BUTTON_MIDDLE: //do stuff break; } } break; } (我正在使用SDL,但我希望主要实践也适用于库和框架)。对于大型项目,这似乎不是最佳解决方案。我可能有几个对象都想知道用户所按的内容,因此使这些对象处理输入更为有意义。但是,它们不能全部处理输入,因为一个事件发生后,它将被推入事件缓冲区,因此另一个对象将不会接收该输入。最常用的方法是什么?
16 c++  sdl  input  standards 

5
每秒设置帧上限有什么好处?(如果有)
我正在使用OpenGL开发一个简单的游戏,使用SDL进行显示初始化和输入,从时间的角度来看,我有两个选择。当以秒为单位的optimableTimePerFrame = 1 / theFramerateCap时,排名第一的仅是为optimizeTimePerFrame休眠的-theTimeTakenToRender。(我不完全确定这是否必要,因为这等效于使用vsync,这可能更准确。如果我的假设正确,请告诉我SDL + OpenGL是否默认具有vsync,如果没有,另一种方法是测量自渲染最后一帧以来的时间,并仅相应地调整运动。(渲染框架所花费的时间越短,实体在该框架中移动的距离越少)。在性能,减少闪烁等方面,这两种方法的优缺点是什么?
13 opengl  sdl  frame-rate  vsync 

3
《 Dont Starve》中使用了哪种动画技术?[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使其成为Game Development Stack Exchange 的主题。 6年前关闭。 在业余时间玩一些游戏时,我偶然发现了2D / 3D生存游戏。该游戏显然是用SDL和GLUT(不要挨饿)制作的,但真正令我惊讶的是游戏中的动画。 动画非常流畅流畅。动画时没有变形,通常在手工制作的动画中会发生以下情况:删除像素,动画变得锯齿,而且根本不那么平滑。那让我思考他们如何设法完成如此高质量的动画。他们是真的是手工制作的吗(如果是的话,那一定是一个非常有才华的艺术家),是骨骼动画还是他们在使用另一种技术?
12 animation  sdl  glut 

4
SDL中的陷阱鼠标
如何将用户的鼠标捕获到我的游戏中?这不是一个全屏游戏,但我想要它,以便用户不能将鼠标拖到屏幕外。 我是否需要检查鼠标和SDL_WarpCursor的坐标以使其在窗口内显示(手动),还是有自动方法? 谢谢。
12 sdl  input  mouse 

2
如何使用SDL计算增量时间?
我听说您可以使用两个名为SDL_GetPerformanceCounter和SDL_GetPerformanceFrequency的函数来计算增量时间。我不确定它们如何完全工作,但我听说它有点类似于使用SDL_GetTicks() Uint64 NOW, LAST; double deltaTime = 0; while (somebool) { LAST = SDL_GetPerformanceCounter(); NOW = SDL_GetPerformanceCounter(); LAST = NOW; deltaTime = (NOW - LAST) / (double)SDL_GetPerformanceFrequency(); /**Rendering**/ } 我有这段代码,但是每当我打印出deltaTime或尝试使用它时,它总是等于一些真正的随机和疯狂数字。这个对吗?
11 c++  algorithm  sdl 

2
将OpenGL原点更改为屏幕左上方时,我应该担心什么?
对于自我教育,我正在使用SDL / OpenGL用C ++编写2D平台引擎。我最初使用sdltutorials.com和lazyfoo.net上的教程从纯SDL开始,但是现在我使用SDL创建OpenGL渲染上下文,然后使用OpenGL函数进行渲染(特别是即时模式,但是我正在学习VAO / VBO) )。我仅将SDL用于接口,音频等。 SDL使用坐标系,其原点位于屏幕的左上角,而y轴的正指向下。在OpenGL中设置正投影可以很容易地做到这一点。 我知道纹理坐标是一个从0到1的右手系统-在渲染之前垂直翻转纹理(好吧,在加载之前翻转文件)会产生可以正确渲染的纹理...如果我正在绘制,这很好整个纹理,但最终我将使用tileset并可以想象问题。 执行此操作时,我应该在渲染方面关注什么? 如果有人提出任何建议,或者他们自己做了建议并指出未来的陷阱,那将是不错的选择,但实际上任何想法都会受到赞赏。
11 c++  opengl  2d  sdl 

1
SDL一次绘制多个表面
我正在尝试编写一个平台游戏,其中将关卡背景的精灵分解为512x512块。我一次在内存中保留了3个块,我正在尝试编写代码以将这三个块都抹在屏幕上。这是我当前的代码: SDL_Rect where; where.y = -game->camera->y; where.x = -game->camera->x - MAP_WIDTH; SDL_BlitSurface(left_chunk, NULL, screen, &where); where.x = -game->camera->x; SDL_BlitSurface(center_chunk, NULL, screen, &where); where.x = -game->camera->x + MAP_WIDTH; SDL_BlitSurface(right_chunk, NULL, screen, &where); 我遇到的问题是,哪个块首先被弄污是唯一显示的块。其余的无法显示在屏幕上。我认为这个问题可能与alpha透明度有关,但是即使这些块根本不重叠,它们仍然无法消除。在代码的其他部分中,我一次将多个内容(例如字符和背景)拖到屏幕上,它们都可以正确显示。这部分代码是我遇到此问题的唯一区域。 如果我注释掉了left_chunk的行,它将变为:
10 sdl 

1
基于回合的JRPG战斗系统架构资源
在过去的几个月中,我一直在忙于使用SDL库用C ++编程2D JRPG(日式RPG)。探索模式或多或少已经完成。现在我要解决战斗模式。 我无法找到有关如何构造基于回合的经典JRPG战斗系统的任何资源。我发现的只是关于破坏公式的讨论。我尝试过谷歌搜索,搜索gamedev.net的留言板,以及在Stack Exchange上浏览与C ++相关的问题。我也尝试读取现有开源RPG的源代码,但是如果没有某种指导,就好像在大海捞针一样。 我不是在寻找D&D之类的规则或类似规则。我纯粹是在谈论代码和对象结构设计。战斗系统使用菜单要求玩家输入。接下来,当英雄和敌人执行其动作时,将执行战斗回合。 谁能指出我正确的方向?提前致谢。
9 c++  2d  architecture  sdl  rpg 

1
为什么V8不能与SDL线程一起运行?
我能够将V8与我的游戏进行编译和链接,并且代码解释正常。但是我想划分代码,游戏循环应该在一个线程中存在,脚本引擎应该在游戏循环的第二个线程中运行。我正在使用SDL,因此尝试使用此代码生成新线程 SDL_CreateThread(ScriptingEngine::SpawnMain, NULL); 以下代码是我的测试脚本引擎: namespace ScriptingEngine { v8::HandleScope handleScope; v8::Handle<v8::ObjectTemplate> global = v8::ObjectTemplate::New(); v8::Persistent<v8::Context> context; void Setup() { // TODO: bind functions to global // ... context = v8::Context::New(NULL, global); } int SpawnMain(void *arguments) { v8::Context::Scope scope(context); v8::Handle<v8::Script> script = v8::Script::Compile( v8::String::New("'Hello World'") ); v8::Handle<v8::Value> result = script->Run(); context.Dispose(); return …

1
使用sleep在单个线程中将逻辑/更新与渲染/绘制代码分开
我读过,游戏对象的速度不应该受到FPS的阻碍,而应该基于时间。如何分隔更新/绘制代码以在不限制绘制速率的情况下最大化性能,并提供基于时间的恒定逻辑更新速率? 我当前的伪代码如下 loop { draw(); if (ticksElapsed() > 100) { update(); ticks+= ticksElapsed(); } } 问题在于绘图代码阻碍了update()速率的性能。而且它消耗了100%的cpu,因为如果引发了睡眠,它将同时中断两个绘图/逻辑功能。 我也在使用SDL,它似乎没有vsync选项。我也听说过固定和可变时步的术语,但是我不确定用sleep()如何做到这一点。

2
用C ++ / SDL制作2D Platformer。寻找教程/示例/资源[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使它成为Game Development Stack Exchange 的主题。 去年关闭。 我有很多C ++经验,但是没有游戏编程经验。今年夏天,我计划使用C ++ / SDL从头开始创建2D平台游戏,以提供学习体验。我正在寻找尽可能多的资源来帮助我入门。好的源代码,教程,任何东西。 我发现的最好的教程之一是已故的Florian Hufsky的非活跃的Jump'n'run开发教程。任何类似的教程吗?
9 c++  2d  sdl  platformer 

2
如何在OS X上处理OpenGL和全屏
我在OS X上进行大部分开发,对于我当前的游戏项目,这是我的目标环境。但是,当我玩游戏时,我会在Windows上玩。作为Windows游戏玩家,我习惯于Alt + Tab从游戏内切换到最后打开的应用程序。 在OS XI上,目前找不到支持该功能的游戏,也找不到能使之成为现实的方法。我当前的项目基于SDL 1.3,我可以看到cmd + tab是直接发送到我的应用程序且未被操作系统拦截的序列。 现在,我的第一个尝试是在cmd + tab上隐藏渲染窗口,该渲染窗口当然可以工作,但是其缺点是,当用户跳回到应用程序时,无法恢复SDL中的隐藏OpenGL窗口。首先,没有为此触发的事件,或者我找不到它,其次,核心问题是当该应用程序窗口隐藏时,我的游戏仍然是活动的应用程序,只是该窗口消失了。 那真是令人讨厌。 任何想法如何近似alt + tab的Windows / Linux行为?
9 opengl  sdl  macos 
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.