c++语言,用windows的mfc制作游戏,神武哪个职业可玩性高高吗,想实现精美画面,动画效果,该怎么办

198被浏览29,211分享邀请回答3716 条评论分享收藏感谢收起103 条评论分享收藏感谢收起如何用C++(MFC)制作一个小游戏,求高手教,谢谢_百度知道
如何用C++(MFC)制作一个小游戏,求高手教,谢谢
我有更好的答案
比较麻烦啊,一个个文件对垒起来也够呛的,看你问这问题应该是C的初学者吧,还是认认真真找几本书看看,理解了,就能做游戏了,win也是用C写的
为您推荐:
其他类似问题
您可能关注的内容
mfc的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。3,396被浏览235,579分享邀请回答GUIMgr* GUI;
const unsigned int ID_BUTTON = 1;
const unsigned int ID_SLIDER = 2;
float value = 0.5f;
void Init()
GUI = new GUIMgr();
GUI-&Add(new Button(ID_BUTTON, "Click me", ...)); // 初始化每个控件对象
Slider* slider = new Slider(new Slider(ID_SLIDER, "Slide me", 0.f, 1.f, ...));
slider-&SetValue(0.5f);
GUI-&Add(slider);
GUI-&SetCallbackFunc(&Callback);
void Callback(int widget_id)
switch (widget_id)
case ID_BUTTON: OnClick();
case ID_SLIDER: value = GUI-&GetSlider(ID_SLIDER)-&GetValue();
} // 回调函数中处理事件,App需要从控件中得到数据。
void main()
while (running)
GUI-&Render();
IMGUI模式在使用上会更简单粗暴一些。控件没有自己的对象,不保存任何状态,不用单独的去实现UI和程序间数据的交换,甚至都不需要单独为事件写回调函数。每个控件就是一个函数,直接在程序的Draw()函数里要哪个控件就调用哪个函数就好了。同样上面例子的控件写成code大概是这样:GUIState* pS
void RenderGUI(GUIState* pState, float& value)
if (Button(pState, "Click me", …)) // 每个控件就是一个函数
DoButtonAction();
Slider(pState, "Slide me", value, 0.f, 1.f, …); // 控件函数直接修改App数据,不需要explicit的去传递
void WindowProc()
Update(pState, ...); // 获取基本鼠标键盘等IO消息
void main()
pState = new GUIS
float myValue = 0.5f;
while (running)
RenderGUI(pState, myValue);
拿我自己的GUI库举个例子,弄出图片里三个窗口,一堆控件需要的所有代码就是这些,不用单独的写callback函数拷贝数据,不用单独初始化每个控件,实在爽快。再说下实现上的差别。RMGUI模式里每一个控件都是一个对象,自然你得给每个控件弄一个类,不同的控件有不同的成员变量保存不同的数据。每一个控件都要各自实现自己的交互的函数,绘制的函数,还有返回数据的函数。然后用一个GUIManager统一管理控件,分配事件,绘制控件。代码大概长这样:class GUIMgr
Array&Control*& C
NotifyEvent CallbackE
// GUI Manager统一管理所有控件
void Init(...);
void AddControl(Control* cont) { Controls.Add(cont); }
void SetCallback(NotifyEvent event) { CallbackEvent = }
void Render() { foreach control in Controls control-&Render(); }
void HandleMsg(Message msg)
// 处理消息后调用Callback传给App
Control* cont = SelectControl(msg);
cont-&HandleMsg(msg);
CallbackEvent-&Invoke(cont);
class Slider : public Control
float M // 每个控件有自己的状态
// 每个控件都要实现若干接口
void Init(...);
void Render()
float GetValue() const { return V }
bool HandleMsg(Message msg);
RMGUI的逻辑实在复杂,我这也只是随手写了个大概的样子就快晕了,相比之下IMGUI则每一个控件都是一个大函数,既处理交互,又做渲染。所以IMGUI的控件本身不储存任何数据,数据全部都放在App里,直接在函数里对数据修改和用数据渲染。代码大概长这样。void Slider(const char* str, float* pVal, float min, float max)
int Id = GUIState.Id++; // Id隐式的cache在state里面
Message msg = GUIState.M // 从State中拿到IO消息
if (msg.LButtonDown && InRect(GUIState)) // 当前控件的位置信息也可以存在Cache里面
GUIState.ActiveId = Id;
if (Id == GUIState.ActiveId && msg.MouseMove)
// 处理消息。。直接修改App的pVal
pVal = LinStep(msg.MousePos.x, Base, End);
DrawString(str);
DrawBarAndButton(...);
因此IMGUI的代码会相对紧凑许多,所有功能都紧凑的放到一块儿了,所以往往实现时候需要的代码量少一些,我自己图片里的那个库有一个功能还算全的文本输入框,代码也不过几百行。而且因为不用专门处理数据的交互和回调函数,实现起来也会更简单一点。口水了那么多,IMGUI自然也不是十全十美的。例如我个人就觉得正因为它每个控件没有自己的状态,要做一些Animation时候就比较蛋疼,animation 至少需要每个控件有一个时间变量吧。当然硬要实现也是可以的,你可以自己加额外的数据结构去保存,只不过那样写起来就完全失去了优雅而且还不如写RMGUI简单了。其他问题例如所有控件的交互逻辑每一帧都要被执行一次也许影响性能(试想一个很差的实现每帧都要排版一个几百万行的字符串60次)。有些人也不喜欢这种把不同功能的代码累在一起的风格。再有就是不太适合那些显示区域不实时绘制的程序。。但是这些问题对于自己写的小程序来说实践中影响都不大。著名的游戏引擎Unity的GUI就是用IMGUI 模式写的。其他的例子例如这个程序的GUI也是Immediate Mode的,可见IMGUI也是可以实现非常复杂的控件。其他例子例如这个程序最后给几个IMGUI相关的链接: 不错的基础教程 介绍的pdf47152 条评论分享收藏感谢收起9126 条评论分享收藏感谢收起请问用C/C++写简单的动画,该怎么入手?_百度知道
请问用C/C++写简单的动画,该怎么入手?
之前一直是写那些dos下的简单算法,现在老师要求写那些小球移动之类的动画了,请问该看什么书?是看MFC吗?还是怎样?先谢谢~
我有更好的答案
对于新手你非得用MFC不行我觉得你用C写动画是大炮打蚊子,还不容易打到逻辑需要特别强,你说用来写游戏还是不错的做一段简单的动画还是用flash吧用纯C++写,需调用Win API难道更高,小球移动用flash五分钟内就能完成你要非得用C/C++写?用flash啊你要写动画?
不是只是写小球移动的,我是举个例子。我的任务是用动画来模拟排队系统。请问需要怎样入手?
下个flash教程,动画就用flash来做最简单。你可以思考一下里面逻辑,评估一下复杂不,要是复杂就得用C/C++,要想快速上手就去学孙鑫C++,要是简单的逻辑,就学flash的action Script学C处理图形不是一年半载能灵活运用的,里面内容太多了,但以后的用处也更大,flash就是简单,你自已选择吧;还有一点可以给你点建议,如今的HTML5也加入了Canvas属性,搭配js css3可以很容易在浏览器上实现图形一些编程,还算简单,但是有兼容性问题
采纳率:51%
为您推荐:
其他类似问题
动画的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。

我要回帖

更多关于 可玩性高的网游 的文章

 

随机推荐