Symbian编程:俄罗斯方块六步曲 (第五步)

 我们已经基本完成游戏,但是在几个方面还要改进。
<script src="/adsc/dispad.asp?id=10"></script>
第一个是用户打开其它程序或打开菜单,游戏仍在继续,当他回来继续玩的时候,游戏可能已经结束了,为避免这样因此我们应加入暂停的功能。

暂停/停止暂停的功能用户将会在暂停的时候用到,这时将要修改选择的菜单,

TechPause/TechUnPause将会被用户切换到其他程序或菜单(不改变菜单选项)时调用,
void TechPause() { iTechPauseRef++; DoPause(); }
void TechUnpause() { iTechPauseRef--; DoPause(); }
这两个都参考了计数器,调用两次TechPause,将调用两次TechUnPause来停止暂停游戏,这是以前老版本游戏的用法,本游戏不是这样的
void CS60TestAppView::FocusChanged(TDrawNow aDrawNow)
{
if (IsFocused())
{
if (!iFocus)
{
iFocus=true;
iEngine->TechUnpause();
}
} else
{
if (iFocus)
{
iFocus=false;
iEngine->TechPause();
}
}
}
如果在DoPause里进行暂停和停止暂停,在暂停是我们要计算暂停多长时间,并结束计数器,
void CS60TestEngine::DoPause()
{
__ASSERT_ALWAYS(iPauseRef>=0 && iTechPauseRef>=0, Panic(ES60TestAssert));

if (iPauseRef==0 && iTechPauseRef==0)
{
if (iState==EPaused)
{
int ms=iPauseTime.MicroSecondsFrom(iBeginTime).Int64().GetTInt();
if (ms<0 || ms>iInterval)
ms=0;
iState=ERunning;
After(iInterval-ms);
}
} else
{
if (iState==ERunning)
{
iState=EPaused;
iPauseTime.HomeTime();
Cancel();
}
}
}
在停止暂停时我们同样要一个计数器来计算剩余的时间。

我们调用TechPause/TechUnPause CS60TestAppView::FocusChanged时是我们打开其他程序或菜单也就是我们的焦点不在此游戏上是,而Pause/UnPause CS60TestAppUi::HandleCommandL在菜单选项里选择的。

当用户从菜单里选择”pause”后,我们应将菜单改成”unpause”转态,这是通过CS60TestAppUi::DynInitMenuPaneL来实现的,每次显示菜单是都会执行它。因此我们在资源文件中设定相对应的字符串。
RESOURCE TBUF16 r_menu_pause_title
{
buf = "Pause";
}

RESOURCE TBUF16 r_menu_unpause_title
{
buf = "Unpause";
}
另外我们还在背景里加了一副图片,
图片在symbian OS中被存为*.mbm文件,是从*.bmp文件在build过程时制作过来的,在mmp文件加入
START BITMAP S60Test.mbm
HEADER
TARGETPATH /system/apps/step5
SOURCEPATH ../bitmaps
SOURCE c12 tlo.bmp
END
就可以了,一个*.mmp文件可以包含几个*.bmp文件
在本例中s60test.mmp将包含一个bmp文件,图片前面的c12表示是12bit(4096色)来节省空间,你也可以用C16(65536色),build也可以创建另外一个文件s60test.mbg,它将包含所有*.mbm文件的ID,在我们的文件就一个,所以它的ID是EMbmS60testTLO,
iBackground=CEikonEnv::Static()->CreateBitmapL(iPathName, EMbmS60testTlo);
来装载背景图片。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值