3D FPS

1234567890

  C++博客 :: 首页 :: 联系 :: 聚合  :: 管理
  57 Posts :: 2 Stories :: 57 Comments :: 0 Trackbacks

常用链接

留言簿(10)

我参与的团队

搜索

  •  

最新评论

阅读排行榜

评论排行榜

#

C++ 想写些高深的 不过我不会
呀 写些入门级的 充充数
stl 里面有个算法的 sort

大概是用那个partion sort 算法吧 其实我不太清楚 根据OO 思想 不应该去知道 对这个思想有保流

使用上方便 放入起始的位置迭代器 然后再放入自己的函数对象就可以了

写个示例:

#include <stdio.h>
#include <tchar.h>
#include <algorithm>
#include <iostream>
#include <utility>
#include <stdlib.h>
#include <vector>

template<int iType>
struct mygreater
{     
    bool operator()(const std::pair<int,float>  & _Left, const std::pair<int,float>  & _Right) const
    {   
        if (iType == 1)
        {
            return (_Left.first > _Right.first);
        }
        else if (iType == 2)
        {
            return (_Left.second > _Right.second);
        }
        else
        {
             //error
        }
       
    }
};

void myprint(const std::pair<int,float>  & i)
{
    std::cout<< i.first << " " << i.second << "\n";
}

int _tmain(int argc, _TCHAR* argv[])
{
    std::vector<std::pair<int,float> > gVecpair;
    for (int i = 0; i <= 10; i++ )
        gVecpair.push_back( std::make_pair( rand(),(float)rand()));
   
    std::for_each(gVecpair.begin(),gVecpair.end(),myprint);
    std::sort(gVecpair.begin(),gVecpair.end(),mygreater<1>( ));
    std::for_each(gVecpair.begin(),gVecpair.end(),myprint);

    std::cout<<"\n";

    std::sort(gVecpair.begin(),gVecpair.end(),mygreater<2>( ));
    std::for_each(gVecpair.begin(),gVecpair.end(),myprint);

    getchar();
    return 0;
}


posted @ 2009-01-12 00:12 DK_jims 阅读(387) | 评论 (1)编辑 收藏

想写一些东西
虽然我并不是无东西好写 但我不想写
近来发现自己逻辑能力太低 转数不够高
好想找一些理由的
可惜 低层开发的都是高手
我在逻辑开发这个层 还是整理一下而已

逻辑能力 通常来说就是将一堆东西整理成一排的东西

记起以前装VC++6.0 我连C++语言都不知道是什么

然后按下一步一步 竟然按出个窗口 神奇呀

想想办法提高自己的大脑转数才行

posted @ 2008-12-27 07:35 DK_jims 阅读(117) | 评论 (0)编辑 收藏

网上看看 windows7 差不多出来了

vista 又过时罗

快 时间 速度

posted @ 2008-12-14 21:51 DK_jims 阅读(99) | 评论 (0)编辑 收藏

近来玩EMACS 文本编辑器

不用用 就只用记事本功能

写的时候 就CX CF 然后写文件名 FF

写完东西后 按CX CS CZ 好过引的一组 保存并最小化

很好 这样的组合 但是最小化后 我找不到如何重新唤醒这个ES的方法

然后 我觉得 如果 最小化 再有一个全局的热键 唤醒就好了

于是 觉得这个随便用VC写一下就可以了

那就上网搜搜 汗 对windows api 不是惊人的明白 无法不网

搜到是 reg??hot??key 然后看看
想了一下 就找到ES窗口 然后注册一个全局热键给本地这个窗口 响应 最大化ES的函数 showwindow 这样就OK啦

咁我就用控制台写了
然后控制台的窗口句柄 找不到 找到了一个Handle 未果

放弃了 那用一个createwindow自己创建一个窗口算了

代码检查出错基本上我无 我只是写写方便一下自己玩ES 不要学这样无检查性的代码

起码我无检查注册热键成不成功的

有了这个exe

按ALT + Z 就是唤醒ES的了

跟Ctrl + Z 对应一下
 
然后觉得这个窗口阴住地方
搞了个Ctrl + alt +shift +D 的隐藏这个东西 显示也用这个键

系统套盘那个不想搞 合适几行代码了事算了

ES_now  

2010_1115 更新
http://www.cppblog.com/Files/jimsmorong/esnow_bjam.rar

代码与EXE都在这里 
posted @ 2008-12-06 23:56 DK_jims 阅读(337) | 评论 (3)编辑 收藏

近来做服务那边

网上搜到有个 Ascent的开源大项目不错 介绍大家看看 反正我无看懂 看了几眼 就不看了 但我就是敢说它不错

关于Ascent 这个网址的人有研究 http://blog.csdn.net/yebeans/


然后呢 听ES的浮夸 很过引 做个追星的人 ES

嗯 有时又想想以前的岁月 觉得应该研究下如何追星

如何拜偶像


想想下 应该足够证明我还是有思想 嗯哆了
posted @ 2008-12-01 23:28 DK_jims 阅读(120) | 评论 (0)编辑 收藏

C#的委托看得我晕晕的 还有socket的东西有些不太明白 大学时写的东西 不知道怎么 硬是给我乱调试运行得了 不过现在不知道了

我发布的代码本着完全不负责的发的 特别是这个 记得以前还有个mfc的 扔了不知道在哪里了
/Files/jimsmorong/DK_Socket_v1.rar
posted @ 2008-09-20 09:18 DK_jims 阅读(171) | 评论 (1)编辑 收藏

premake是lua创建项目管理文件用的

可以自己写lua文件 现在好多开源程序用这个构建 我也自己写一个

用批处理建文件结构
先点那个amake.cmd 然后就上一层目录 就有一个文件夹的了 是DK_project文件夹

里面的那个DK_project\project\build\premake里有几个批处理 再点这个里面的amake就可以有sln文件出来的了 根据premake.lua决定罗 有时间大家看看 很过引的东西
代码在这里
/Files/jimsmorong/DK_create_project.rar
posted @ 2008-09-20 09:13 DK_jims 阅读(925) | 评论 (0)编辑 收藏

dxut 10里有sdkmesh网格文件格式 这个我再封闭一下 将大小中心点放进去
今年5月份写的一个作品
以前做过一个蛇仔在地上转圈子的 代码写的自己也不想看了 将它放出来算了

代码在这里:
/Files/jimsmorong/directx_snake.rar
posted @ 2008-09-20 09:05 DK_jims 阅读(178) | 评论 (0)编辑 收藏

以前学lua写过用lua控制键盘mouse的

然后近来无事做 闲 网上找到个钩子程序 加入去 记录下按键消息 然后写成lua文件 再执行lua 就有按键精录的效果了 不过时间器无写到 mouse也未写 简单只记录键盘 隔一秒执行一个按键

代码在这里:
/Files/jimsmorong/kbhook.rar

更新一下
http://www.cppblog.com/jimsmorong/archive/2013/05/11/200176.html
posted @ 2008-09-20 09:01 DK_jims 阅读(841) | 评论 (0)编辑 收藏

1.2008/9/10 3:51:40

2.glest再分析

3.分析方法同表现形式都以文本来体现

// 所以这个是main
4.int glestMain(int argc, char** argv){

 MainWindow *mainWindow= NULL;
 Program *program= NULL;
 ExceptionHandler exceptionHandler;
 exceptionHandler.install();

 try{
  //配置文件的 程序开启的
  Config &config = Config::getInstance();

  showCursor(config.getBool("Windowed"));
  //创建一个程序
  program= new Program();
  //创建一个窗口 以程序指针放在窗口里 可以调用窗口内的程序
  mainWindow= new MainWindow(program);

  //分析命令行 然后就根据程序设置窗口
  if(argc==2 && string(argv[1])=="-server"){
   program->initServer(mainWindow);
  }
  else if(argc==3 && string(argv[1])=="-client"){
   program->initClient(mainWindow, Ip(argv[2]));
  }
  else{
   program->initNormal(mainWindow);
  }

  //main loop
  while(Window::handleEvent()){
   program->loop();
  }
 }
 catch(const exception &e){
  restoreVideoMode();
  exceptionMessage(e);
 } 

 delete mainWindow;

 return 0;
}

5.体误是窗口里有程序指针 程序里有窗口指针 两个互相叼


6.如是这样 就是《配置,窗口,程序,错误》这么4个类
所以一个一个分析

-----------------我是顶顶顶顶的分割线------------------------


7.MainWindow这个类是把设置一个程序指针在里面 然后把消息交给程序处理 继成那个WindowGl类
 将消息交给程序 处理消息这个东西应该在继成的类中
 因为我无看见

8.WindowGl这个类继成Window这个类
 内有一个ContextGl实例类 还有3个方法initGl,makeCurrentGl,swapBuffersGl
 三个方法基本上就是ContextGl的方法 看来就真的是这样的GL布局的Windows
 
 
9.好 看window这个类 基本上这个才真正的是一个window窗口了
 看看先 成员有好多 先看私有成员
  1.一个map 包窗口句柄与窗口指针 具体作用暂时不知道 应该保存东西 就保存窗口的 的吧
  2.成员里有好多标志的东西 还有好多属性的东西 都是窗口的 关于大小 长宽 全屏 句柄 设备DC
 好 看成员函数
  1.好多get set 应该是成员属性多吧
  2.重要的createWindow
      registerWindow
      LRESULT CALLBACK Window::eventRouter
      Window::handleEvent
       
  3.看得出像普通窗口一样就设置回调消息函数
 OK 这个类无继成什么东西了 应该是根的了
 
 
10.看那个program吧


-----------------可耕地可耕地枯无可奈何花落去 可耕地--------------

11.Program竟然无继成什么东西喔 用的是内插的方法
  比较重要的 ProgramState *programState;
        PerformanceTimer fpsTimer;
        WindowGl *window;
       
  成员函数有 1. initNormal(WindowGl *window);
          initServer(WindowGl *window);
           initClient(WindowGl *window, const Ip &serverIp);
          
        2.mouse key 的处理
        3.init,loop,setState,setDisplaySettings
        
12.看那个initNormal吧
 void Program::initNormal(WindowGl *window){
 init(window);
 setState(new Intro(this));
}

13.好 看那个init(window)吧 我考 这么的长 真长呀 长呀

void Program::init(WindowGl *window){
 //最基本的要设置 的 窗口与配置啦
 this->window= window;
 Config &config= Config::getInstance();
 
   //set video mode设置显示的模式
 setDisplaySettings();

 //window窗口的创建也是在这里的 晕死 程序走向也太那个了吧
 window->setText("Glest");
 window->setStyle(config.getBool("Windowed")? wsWindowedFixed: wsFullscreen);
 window->setPos(0, 0);
 window->setSize(config.getInt("ScreenWidth"), config.getInt("ScreenHeight"));
 window->create();
  
 //timers 时间的东西
 fpsTimer.init(1, maxTimes);
 updateTimer.init(GameConstants::updateFps, maxTimes);
 updateCameraTimer.init(GameConstants::cameraFps, maxTimes);

   //log start 日志的东西
 Logger &logger= Logger::getInstance();
 logger.setFile("glest.log");
 logger.clear();

 //lang 语言吧这里是语言吧
 Lang &lang= Lang::getInstance();
 lang.load("data/lang/"+ config.getString("Lang"));
   
 //render 渲染器的东西
 Renderer &renderer= Renderer::getInstance();

 window->initGl(config.getInt("ColorBits"), config.getInt("DepthBits"), config.getInt("StencilBits"));
 window->makeCurrentGl();
  
 //coreData, needs renderer, but must load before renderer init这时得到游戏的核心数据data
 CoreData &coreData= CoreData::getInstance();
    coreData.load();

 //init renderer (load global textures)OK这里渲染 是吧 应该
 renderer.init();

 //sound 这里是声音吧
 SoundRenderer &soundRenderer= SoundRenderer::getInstance();
 soundRenderer.init(window);
}

14.看那个setState吧 无意思 不解析
void Program::setState(ProgramState *programState){
 
 delete this->programState;
 
 this->programState= programState;
 programState->load();
 programState->init();

 updateTimer.reset();
 updateCameraTimer.reset();
 fpsTimer.reset();
}

15.看这个 竟然有个MainMenu的东西 应该是菜单的 不敢确定
void Program::initClient(WindowGl *window, const Ip &serverIp){
 MainMenu* mainMenu= NULL;
 
 init(window);
 mainMenu= new MainMenu(this);
 setState(mainMenu);
 mainMenu->setState(new MenuStateJoinGame(this, mainMenu, true, serverIp));
}

16.看这个 嗯 loop吧 在这里 程序也基本上出来了 不也就是这样的
void Program::loop(){

 //render
 programState->render();

 //update camera
 while(updateCameraTimer.isTime()){
  programState->updateCamera();
 }

 //update world
 while(updateTimer.isTime()){
  GraphicComponent::update();
  programState->update();
  SoundRenderer::getInstance().update();
  NetworkManager::getInstance().update();
 }
 
 //fps timer
 while(fpsTimer.isTime()){
  programState->tick();
 }
}

---------------------小结-----------------------
看来全在program中调用成员来做 辛苦 窗口也放在了程序里了
嗯 应该就可以看其他的子模块了 main好似已经被我拆解了
--------------------------------------------


17.ProgramState 这个比较关键喔 是状态 从字面上来理解 应该要看看
ProgramState竟然放了一个放一个program指针后 全是虚拟成员函数 看来是一个标准的东西

18.看来main还未被我拆解喔

19.那么我继续
这个是设置那个state的 好明显是交给了programstate了
void Program::setState(ProgramState *programState){
 
 delete this->programState;
 
 this->programState= programState;
 programState->load();
 programState->init();

 updateTimer.reset();
 updateCameraTimer.reset();
 fpsTimer.reset();
}

很有可能走去了这里 不过我还不清楚
void Game::load(){
 Logger::getInstance().setState(Lang::getInstance().get("Loading"));
 
 //tileset
    world.loadTileset(gameSettings.getTilesetPath(), &checksum);

    //tech, load before map because of resources
    world.loadTech(gameSettings.getTechPath(), &checksum);

    //map
    world.loadMap(gameSettings.getMapPath(), &checksum);
}

20.暂时设置那个mian架构是建立在那个嗯 之上的
在一个state之下 有一些继成 然后在继成里做一些东西 再交给指定的工人做乜

 


--------------我是不知道做什么的分割线-------------

21.好吧 这个就当是一个main的cpp吧


2008/9/11 20:36:18
 

posted @ 2008-09-20 08:57 DK_jims 阅读(953) | 评论 (1)编辑 收藏

仅列出标题
共6页: 1 2 3 4 5 6