Win32 Game Dev
文章平均质量分 73
SKT allsunday
这个作者很懒,什么都没留下…
展开
-
Windows 编程注意事项 || 自用
1. Window API 函数Windows API 提供的函数,有ANSI和UNICODE 版本的,需要注意的是,你调用一个函数时,这个函数名可能是定义好的一个macro罢了#define MessageBox MessageBoxA#define MessageBox MessageBoxW#undef MessageBox 取消macro注意你使用的是什么编码2.cl 调用Windows 函数的过程一般,你在.cpp文件中使用到的函数,都是CRT去间接调用的,为什么间接?因为,不是操原创 2021-06-06 13:17:09 · 237 阅读 · 1 评论 -
13、多线程程序测试
在windows上开启一个线程需要用到一个函数,返回一个handle之类的东西,handle 可以控制线程。目的,看看多线程在一个进程中的执行情况:实现思路:先开辟8个线程,之后,把 8个 works 添加到 工作队列中,让线程自己碰运气去执行队列里面的works。其中,8个线程都有各自的id,如果某个线程执行了一次打印,那么就会输出 该线程,并且输出 它执行的work是什么类型。#include<stdio.h>#include<windows.h>#in原创 2020-08-17 18:23:10 · 170 阅读 · 0 评论 -
12、进程、线程及中断、core、hyperthread、C++ struct内存布局
1、进程一般,CPU在执行指令前,要知道一些信息包括(1、开始执行的指令是那个2、内存布局(因为Virtual memory,需要知道物理disk地址)3、寄存器状态)这样,就可以map到物理地址,去做实际的事情。每次运行一个.exe文件,都会开启一个进程,用来告诉CPU 这个程序的内存是怎么布局的,因此,运行中的程序的内存布局方面是完全由进程控制的,进程就是个内存布局的状态。进程包含 内存、翻译buffer、地址表。2、线程进程中包含很多个线程,线程是存储了asm 指令集、寄存器信息原创 2020-08-15 20:58:45 · 269 阅读 · 0 评论 -
11、dll 在程序中的加载方法
一般程序要使用到dll中的函数,但是实际的dll中函数地址 的提供方法分两种,runtime提供dll直接在runtime 提供dll,在程序运行过程中,先把dll载入到内存,此时如果卸载该dll,例如,freedll(dllname);程序照样运行,这时你就可以写个新的dll,又加入到内存,再把上一次用到dll 中函数地址的指针变一下(指向其他内存),就可以继续用新的dll,于是有了新的功能,并且不用去关闭程序,做到实时的dll更新。#define GET_STATE(name) DWORD WIN原创 2020-08-07 20:54:57 · 620 阅读 · 0 评论 -
10、day10 | 程序设计中的文件I/O操作
文件I/O 操作 分成两类1、加载 只读文件,比如游戏声音、asset、3Dmodel。核心思想,把文件从driver上拿到下来,放到内存上供程序使用。2、保存程序的运行(游戏)状态,比如,调整窗口的全屏,声音增大之类的,即写入,也读取。也就是对只读文件操作,和,对读写文件操作。...原创 2020-07-15 19:30:31 · 82 阅读 · 0 评论 -
9、day09 在win32平台写的代码如何实现跨平台性?
在以前,会用编译预处理语句,比如#if 。。。#else 。。。#endif来实现跨平台的程序运行,比如:#if GameLOL_Win32{Windows代码}#else if GameLOL_Linux{Linux代码}#endif把这些变量都初始化为 0 ,只需要在编译的时候,利用编译器选项去获得变量的值,比如,GameLOL_Win32 = 1,于是就跑Win32的代码了。把操作系统虚拟化出这个游戏外。...原创 2020-07-07 18:27:00 · 139 阅读 · 0 评论 -
8、day08 | QueryPerformanceCounter访问性能计数器
这个函数会和windows交互,问时间,精确度超过了milieu-seconds。比如,你有1000 mili-seconds(毫秒),在这个时间里面,游戏要有60帧,也就是1000/60=16.66666… mili-seconds,每一帧会在屏幕持续16 ms,所以这也就是我们需要处理下一帧的时间...原创 2020-07-06 15:04:02 · 301 阅读 · 0 评论 -
7、day07 DirectSound音频 | 本此插入正弦波进行播放
浮点数工作原理:How does float number work on Computer?IEEE定义了多种浮点格式,分为单精度,双精度,扩展双精度;把每个浮点数都分成三部分,符号位、指数域、尾数域。假设我们有个32位float,由3部分组成1、其中有mantissa,范围( 0 ,1 ),mantissa含有一系列bit位存储小数点后的数字;2、其中有exponent(指数——a^n,n为指数),指数为n,底数为23、其中有sign 位表示正或负(0正,1负)所以,exponent告诉你,原创 2020-07-06 14:35:36 · 145 阅读 · 0 评论 -
6、Day06 在音频副缓冲区中写入自己的音频并播放
本次需要用到虚函数的call,虚函数解释:struct foo{ int x; int y; virtual void Bar(int C);};virtual关键字会让编译器插入一个Vtable 指针,在全局区编译器会把Vtable定义成全局的,也就是一个Vtable for foo(),它包含一系列的函数指针当调用这个函数foo.Bar(4)时,编译器就会先看下foo的Vtable,再到里面找Bar();只要是使用了Virtual关键字的结构体中的函数,就会有张全局的VTabl原创 2020-07-05 13:06:07 · 154 阅读 · 0 评论 -
5、day05音频 | How does audio works ?
DirectSound是在Windows的窗口上进行工作的,所以本次在创建窗口后添加DirectSound初始化,Win32InitSound();主要步骤如下:Win32InitDSound(){ //1-加载dll //创建DirectSound对象,DS是面向对象的 //创建主缓冲区,这个是会输出到声卡的 //创建副缓冲区,我们写给主缓冲区的 //开始播放音频}...原创 2020-07-04 12:00:52 · 137 阅读 · 0 评论 -
4、day04利用XInput,在C/C++创建的窗口中读取键盘输入
对于GamePad游戏手柄的键盘读入:首先,#include<XInput.h>文件,里面存放了很多的控制器,控制着一些键盘,鼠标之类东西的状态。因此,为了读取键盘输入,必须先把每个XInput中的控制器遍历一次,包括键盘控制器,鼠标控制器,声音等等;每遍历一次,就获取控制器的状态,如果状态是可以的,就可以输入;代码逻辑如下:DWORD dwResult; for (DWORD i=0; i< XUSER_MAX_COUNT; i++ ){ XINPUT_STATE原创 2020-07-03 20:11:11 · 1410 阅读 · 0 评论 -
3、day03给用C/C++创建的窗口添加动画效果
Windows系统的坐标参考永远是从上到下的,左边是0,右边是正数增长;上边是0,下边是正数增长;Y轴是竖线,X轴是横线。因为分配的Bitmap的内存是Void类型,C语言是不知道void指向的是什么东西,因此我们把它转成int8。要实现动画,那么在入口函数中,就不能在Windows开始消息循环时等待。其中,GetMessageA ()会在每次运行完成一个消息后就阻塞我们,等待另一个消息。于是,我们就要充分利用这个等待时间去做点动画。这时我们采用PeekMessage,他和GetMessage原创 2020-07-02 22:13:15 · 457 阅读 · 0 评论 -
2、在用C/C++创建的窗口中,定义像素缓冲区,自己写渲染器显示图形
自己写一个渲染器renderer,是做一个我们自己的像素缓冲区Buffer,以此可以render任何自己写的东西。然后把这个渲染器给windows系统用,就会把它展示在我们自己创建的窗口中,现存的所有渲染都是依赖3d 显卡。在很久以前,你必须写一个renderer,因为显卡不能帮你做。render的原理是,你写东西到buffer里面,然后告诉graphic card,这个Buffer是你需要去display的,这就是学习(图形渲染)rendering的第一步。...原创 2020-07-01 22:50:45 · 571 阅读 · 0 评论 -
1、如何利用C/C++编程打开一个windows窗口
创建一个windows窗口,再在内存中构建一个buffer,做一些我们自己定义的rendering并且在窗口中展示buffer。现在的游戏都是让显卡做rendering,但是要我们自己做rendering,必须先做一些自己的东西,然后在展示出来,并不是显卡自己做的。但是这个话题以后再说,现在主要问题是如何打开一个标准的windows 窗口?windows窗口的结构如下:typedef struct tagWNDCLASS { UINT style;//是一些二进制的整数flag WN原创 2020-06-30 22:08:09 · 4004 阅读 · 0 评论