SDL Game Development InputHandler类的一处bug
个人十分推荐SDL Game Development 这本书,它并不是死抠SDL的api,而是一步步带着我们如何对一个游戏进行构架。
虽然我没用过游戏引擎,也基本不会写游戏,但是我认为这本书本身就是在带着我们完成一个自己的游戏引擎。
此书附带的源码中有一个common-framework文件夹,里边是一个游戏开发的基本框架,书中的代码也是按那个套路来写的。
今天在调试弹幕的时候发现一处bug跟其中InputHandler类有关
InputHandler::~InputHandler()
{
// delete anything we created dynamically
delete m_keystates; /***此行报错****/
delete m_mousePosition;
// clear our arrays
m_joystickValues.clear();
m_joysticks.clear();
m_buttonStates.clear();
m_mouseButtonStates.clear();
}
在此类析构,delete指针时程序崩掉。而这个 m_keystates 指针的由来如下:
void InputHandler::onKeyDown()
{
m_keystates = SDL_GetKeyboardState();
}
void InputHandler::onKeyUp()
{
m_keystates = SDL_GetKeyboardState();
}
此指针为SDL api函数的返回值,然后查阅了SDL的源码,其实现如下:
const Uint8 *
SDL_GetKeyboardState(int *numkeys)
{
SDL_Keyboard *keyboard = &SDL_keyboard;
) {
*numkeys = SDL_NUM_SCANCODES;
}
return keyboard->keystate;
}
其返回指针为SDL_Keyboard结构体里的一个成员,找到其声明如下:
struct SDL_Keyboard
{
/* Data common to all keyboards */
SDL_Window *focus;
Uint16 modstate;
Uint8 keystate[SDL_NUM_SCANCODES];
SDL_Keycode keymap[SDL_NUM_SCANCODES];
};
返回的keystate这个成员其实是一个静态数组的头指针。
综上:
InputHandler::~InputHandler()
{
// delete anything we created dynamically
delete m_keystates; /**此指针不能删除**/
delete m_mousePosition;
// clear our arrays
m_joystickValues.clear();
m_joysticks.clear();
m_buttonStates.clear();
m_mouseButtonStates.clear();
}
SDL Game Development InputHandler类的一处bug的更多相关文章
- 咏南中间件修正了一处BUG,调用中间件插件会报:非法访问
咏南中间件修正了一处BUG,调用中间件插件会报:非法访问将以下方法修改成如下的代码即可function TServerMethods1.GetSvrData(const accountNo, defi ...
- Asp.net core验证类ModelStateDictionary的bug
在使用.net core 3.1 时发现明明没有验证请求类属性,甚至已经加了默认值 但是验证类时依然会报错 经过网上百度等搜索,尝试使用可空类型赋值默认值 果然验证类没有报错 不清楚是微软的bug还是 ...
- as3commons-bytecode 获取所有类的一个BUG
下载了这个swc,号称可以反射出所有加载的类.已经用在了spring. 可是一运行就报错,说bytearray.uncompress出错.操. 下载整个源码,单独加载as3commons-byteco ...
- netbeans中实体类代码的bug
用了netbeans中实体类代码后,忽然报错: com.sun.tools.javac.code.Symbol$CompletionFailure: 找不到sun.util.logging.Platf ...
- 吉日嘎拉DotNet.BusinessV4.2中的一处bug,及我的修复和扩展
bug所在位置:DotNet.Business\Utilities\BaseManager.GetDataTableByPage.cs的函数 public virtual DataTable GetD ...
- 发现UC/OS-III源码有一处不明白!会不会是BUG.高手过来看看!
http://www.amobbs.com/archiver/tid-4939669.html ———————————————————————————————————————————————————— ...
- OpenGL ES & SDL(转载)
原帖:http://qqwt.blog.sohu.com/91060365.html 这个学期在学习嵌入式,由于老师的高要求.所以我们几个水手必须要完成一个项目,名字就叫OpenGL ES & ...
- 给国内知名大厂提BUG有感:安全是一种意识
前言 本周一(2019.07.22),给某知名手机“大厂”提了个安全BUG,默默修复了后,周五回复我“已忽略”,此处省略上千字的心理活动..... 做安全的朋友说这都小事,国内氛围本来就不太好,hac ...
- ie6,ie7,ie8 css bug兼容解决方法
IE浏览器以不支持大量的css 属性出名,同时也因其支持的css属性中存在大量bug. 这里收集了好多的bug以及其解决的办法,都在这个文章里面记录下来了!希望以后解决类似问题的时候能够快速解决,也希 ...
随机推荐
- Python3.4使用MySql
如何在Django1.6结合Python3.4版本中使用MySql django默认的mysql连接是Mysqldb,悲催的是此版本只支持到python2.7,oracle官方的mysql-conne ...
- C#反射(二) 【转】
如果没有看<C#反射(一)>.建议先看<C#反射(一)>再看这一篇.上一篇文章发表,有人评论我所写的东西比较基础.其实我也知道我也只不过是在写最基础的语法而已,之所以写它是因为 ...
- Hdu5517 Triple
Description Given the finite multi-set \(A\) of \(n\) pairs of integers, an another finite multi-set ...
- 自己总结的一些android公共库
本文主要介绍自己在android开发中总结的一些公共库,目前包括下拉刷新ListView.可以响应各个方向CompoundDrawables点击操作的TextView.图片缓存,不断更新,欢迎交流 ? ...
- 调优UWSGI,后台启动,热更改PY,杜绝502
记得加启动参数: --daemonize /var/log/uwsgi.log --post-buffering 32768 --buffer-size 32768 reload.set #!/bin ...
- astyle基本功能介绍
astyle是一个命令行工具,语法格式如下 astyle [options] < original > 例如: astyle --style=ansi foo.cpp 上面的命令将美化fo ...
- How to Setup Chroot SFTP in Linux (Allow Only SFTP, not SSH)
1. Create a New Group Create a group called sftpusers. Only users who belong to this group will be a ...
- lc面试准备:Remove Duplicates from Sorted List II
1 题目 Given a sorted linked list, delete all nodes that have duplicate numbers, leaving only distinct ...
- Java:多线程,线程池,使用CompletionService通过Future来处理Callable的返回结果
1. 背景 在Java5的多线程中,可以使用Callable接口来实现具有返回值的线程.使用线程池的submit方法提交Callable任务,利用submit方法返回的Future存根,调用此存根的g ...
- Bitmap 与Drawable相互转换
Drawable 转 Bitmap import android.graphics.Bitmap; import android.graphics.drawable.Drawable; import ...