coco2d-x 2.0 与1.0版本有些细节的区别,网上的SimpleGame大部分是1.0的,导致采了很多的坑。
1.使用VS2010C创建Cocos2d-win32 Application,名为SimpleGame去掉Box2D选项。
2.新建头文件SimpleGameScene.h和源文件SimpleGameScene.cpp
SimpleGameScene.h
#ifndef __SIMPLE_GAME_H__ #define __SIMPLE_GAME_H__ #include "cocos2d.h" class SimpleGame:public cocos2d::CCLayerColor{ public: SimpleGame(); ~SimpleGame(); virtual bool init(); static cocos2d::CCScene* scene(); virtual void menuCloseCallback(CCObject* pSender); void addEnemy(); void spriteMoveFinished(cocos2d::CCNode *sender); void gameLogic(float dt);// 这个地方是个坑1.0版本使用的ccTime 2.0使用float替代 CREATE_FUNC(SimpleGame);//这个地方也是坑1.0版本LAYER_NODE_FUNC }; #endif
SimpleGameScene.cpp
#include "SimpleGameScene.h" using namespace cocos2d; SimpleGame::SimpleGame(){} SimpleGame::~SimpleGame(){} CCScene* SimpleGame::scene(){ CCScene* scene=NULL; do { scene=CCScene::create(); CC_BREAK_IF(!scene); SimpleGame *layer=SimpleGame::create(); CC_BREAK_IF(!layer); scene->addChild(layer); } while (0); return scene; } //初始化 bool SimpleGame::init(){ bool bRet=false; do { //初始化成功返回真 CC_BREAK_IF(!CCLayerColor::initWithColor(ccc4(255,255,255,255)));// CCSize size=CCDirector::sharedDirector()->getWinSize();//屏幕宽度 //添加游戏退出菜单 CCMenuItemImage *pCloseItem = CCMenuItemImage::itemWithNormalImage( "CloseNormal.png", "CloseSelected.png", this, menu_selector(SimpleGame::menuCloseCallback));//创建菜单,并设置回调函数 CC_BREAK_IF(!pCloseItem); pCloseItem->setPosition(ccp(CCDirector::sharedDirector()->getWinSize().width-20,20));//设置菜单位置 CCMenu* pMenu=CCMenu::menuWithItems(pCloseItem,NULL); pMenu->setPosition(CCPointZero); CC_BREAK_IF(!pMenu); this->addChild(pMenu,1);//添加到simplegame layer //创建精灵 CCSprite* hero=CCSprite::spriteWithFile("Target.png",CCRectMake(0,0,27,40)); CC_BREAK_IF(! hero); hero->setPosition(ccp(hero->getContentSize().width/2,size.height/2)); this->addChild(hero,0); this->schedule( schedule_selector(SimpleGame::gameLogic), 1.0 );//每隔一秒调用gameLogic()添加精灵 bRet=true; } while (0); return bRet; } void SimpleGame::addEnemy(){ CCSprite *enemy=CCSprite::spriteWithFile("Player.png",CCRectMake(0,0,27,40)); CCSize winSize=CCDirector::sharedDirector()->getWinSize(); int minY=enemy->getContentSize().height/2; int maxY=winSize.height-enemy->getContentSize().height/2; int rangeY=maxY-minY; int actualY=(rand()%rangeY)+minY; enemy->setPosition(ccp(winSize.width+enemy->getContentSize().width/2,actualY)); this->addChild(enemy); int minDuration = 2; int maxDuration = 4; int rangeDuration = maxDuration - minDuration; int actualDuration = (rand() % rangeDuration) + minDuration; CCFiniteTimeAction *actionMove = CCMoveTo::actionWithDuration( (float)actualDuration, ccp(0 - enemy->getContentSize().width/2, actualY) ); CCFiniteTimeAction *actionMoveDone = CCCallFuncN::actionWithTarget(this,callfuncN_selector(SimpleGame::spriteMoveFinished)); enemy->runAction(CCSequence::actions(actionMove,actionMoveDone,NULL)); } void SimpleGame::spriteMoveFinished(CCNode *sender) { CCSprite *sprite = (CCSprite *)sender; this->removeChild(sprite,true); } void SimpleGame::gameLogic(float dt) { this->addEnemy(); } void SimpleGame::menuCloseCallback(CCObject* pSender) { // "close" menu item clicked CCDirector::sharedDirector()->end(); }
最后运行之前别忘了修改AppDelegate.cpp,把HelloWorldScene改成自己定义的SimpleGame。
CCScene *pScene = SimpleGame::scene();
原贴:http://docs.sun.com/app/docs/doc/819-6951/6n8ua61e1?l=zh&a=view
可以使用 vmsta 命令报告虚拟内存统计信息,以及有关系统事件(例如 CPU 负载、分页、上下文切换数、设备中断和系统调用)的信息。vmstat 命令还可以显示有关交换、高速缓存刷新和中断的统计信息。
下表介绍了 vmstat 命令输出中的字段。
表 13–1 vmstat 命令的输出
类别
字段名
说明
procs
报告以下内容:
r
分发队列中的内核线程数
b
正在等待资源的阻塞内核线程数
w
正在等待处理中的资源完成的换出 LWP 数
memory
报告实际内存和虚拟内存的使用情况:
swap
可用交换空间
free
可用列表的大小
page
以秒为单位报告页面错误和分页活动:
re
回收的页面
mf
次要错误和主要错误
pi
页入的千字节数
po
页出的千字节数
fr
释放的千字节数
de
最近换入的进程所需的预计内存
sr
由 page 守护程序扫描的当前未使用的页数。如果 sr 不等于零,则 page 守护程序一直在运行。
disk
报告每秒的磁盘操作数,最多显示四个磁盘中的数据
faults
报告每秒的陷阱/中断速率:
in
每秒的中断次数
sy
每秒的系统调用数
cs
CPU 上下文切换速率
cpu
报告 CPU 使用时间:
us
用户时间
sy
系统时间
id
空闲时间
有关此命令的更多详细说明,请参见 vmstat(1M) 手册页。
如何显示虚拟内存统计信息 (vmstat)
使用 vmstat 命令以秒为时间间隔单位收集虚拟内存统计信息。
$ vmstat n
其中,n 是两次报告之间的间隔秒数。
以下示例显示了以 5 秒为间隔收集的统计信息的 vmstat 显示。
$ vmstat 5 kthr memory page disk faults cpu r b w swap free re mf pi po fr de sr dd f0 s1 -- in sy cs us sy id 0 0 0 863160 365680 0 3 1 0 0 0 0 0 0 0 0 406 378 209 1 0 99 0 0 0 765640 208568 0 36 0 0 0 0 0 0 0 0 0 479 4445 1378 3 3 94 0 0 0 765640 208568 0 0 0 0 0 0 0 0 0 0 0 423 214 235 0 0 100 0 0 0 765712 208640 0 0 0 0 0 0 0 3 0 0 0 412 158 181 0 0 100 0 0 0 765832 208760 0 0 0 0 0 0 0 0 0 0 0 402 157 179 0 0 100 0 0 0 765832 208760 0 0 0 0 0 0 0 0 0 0 0 403 153 182 0 0 100 0 0 0 765832 208760 0 0 0 0 0 0 0 0 0 0 0 402 168 177 0 0 100 0 0 0 765832 208760 0 0 0 0 0 0 0 0 0 0 0 402 153 178 0 0 100 0 0 0 765832 208760 0 18 0 0 0 0 0 0 0 0 0 407 165 186 0 0 100
如何显示系统事件信息 (vmstat -s)
运行 vmstat -s 命令,以显示自上次引导系统以来发生的系统事件数。
$ vmstat -s 0 swap ins 0 swap outs 0 pages swapped in 0 pages swapped out 522586 total address trans. faults taken 17006 page ins 25 page outs 23361 pages paged in 28 pages paged out 45594 total reclaims 45592 reclaims from free list 0 micro (hat) faults 522586 minor (as) faults 16189 major faults 98241 copy-on-write faults 137280 zero fill page faults 45052 pages examined by the clock daemon 0 revolutions of the clock hand 26 pages freed by the clock daemon 2857 forks 78 vforks 1647 execs 34673885 cpu context switches 65943468 device interrupts 711250 traps 63957605 system calls 3523925 total name lookups (cache hits 99%) 92590 user cpu 65952 system cpu 16085832 idle cpu 7450 wait cpu
运行 vmstat -S,以显示交换统计信息。
$ vmstat -S kthr memory page disk faults cpu r b w swap free si so pi po fr de sr dd f0 s1 -- in sy cs us sy id 0 0 0 862608 364792 0 0 1 0 0 0 0 0 0 0 0 406 394 213 1 0 99
以下列表介绍了交换统计信息字段。有关其他字段的说明,请参见表 13–1。
si每秒换入的平均 LWP 数
so换出的完整进程数
注 –vmstat 命令会截断 si 和 so 字段的输出。应使用 sar 命令显示更精确的交换统计信息记录。
运行 vmstat -i 命令,以显示每台设备的中断次数。
以下示例显示 vmstat -i 命令的输出。
$ vmstat -i interrupt total rate -------------------------------- clock 52163269 100 esp0 2600077 4 zsc0 25341 0 zsc1 48917 0 cgsixc0 459 0 lec0 400882 0 fdc0 14 0 bppc0 0 0 audiocs0 0 0 -------------------------------- Total 55238959 105
http://blog.csdn.net/5iasp