`
yesjavame
  • 浏览: 715927 次
  • 性别: Icon_minigender_2
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

Symbian学习笔记(8):再尝试着做一个数独游戏

阅读更多
仍是做一个同样界面同样功能的数独游戏,但是所花费的时间远远超出我用Android或者J2ME来做同样的事情,当然运行效率也很明显(我将J2ME实现的数独放在N73上跑过,因为重绘屏幕的代码没有优化,所以效果不好,但同样的算法在BREW或者Symbian上就跑得相当顺畅)。

言归正传,关于数独在Android上的实现,可参考这个:
http://blog.csdn.net/sharetop/archive/2008/02/27/2124153.aspx

这次我主要谈谈在做这个 Symbian版本中遇到的几个问题,希望以后自己不要再犯同样的错误了。

1、多视图的应用程序框架的问题
我用的是Carbide C++ IDE环境,不知道为什么不能生成多视图的架子,所以只能在HelloWorld框架的代码上自己手工改写,结果就弄出一个Panic折腾了我很久,问题出在千万不要在析构函数中去删除创建的CAknView,如下代码(注掉是正确的,否则就在退出应用时会出错):
CSuDoScAppUi::~CSuDoScAppUi()
...{
//if(iAppCtrol!=NULL){
//this->RemoveView(iAppCtrol->Id());
//deleteiAppCtrol;
//iAppCtrol=NULL;
//
//RDebug::Printf("deleteiAppCtrol");
//}
//RDebug::Printf("deleteUi");
}

我们需要负责清除对象的地方是在CAknView中负责删掉CCoeControl,因为在它的DoActivateL/DoDeactivateL两个函数中负责创建和删除CoeControl,但是如果退出时这个DoDeactivateL是不会主动调用的,因此在析构时可以调用一下它:
CSuDoScAppCtrol::~CSuDoScAppCtrol()
...{
iFs.Close();
iList.Close();

DoDeactivate();

RDebug::Printf(
"deleteCtrol");
}

2、关于显示字体的问题
在调用CWindowGc的DrawText方法时,必须要设置一下字体否则不会有东西显示出来,而设置字体有一段标准代码可以参考(来源于网上):
CWindowGc&gc=SystemGc();
CFont
*font=NULL;
TFontSpecfontSpec
=iEikonEnv->LegendFont()->FontSpecInTwips();
fontSpec.iHeight
-=fontSpec.iHeight/6;

iCoeEnv
->ScreenDevice()->GetNearestFontInTwips(font,fontSpec);
gc.UseFont(font);

//dosth.

gc.DiscardFont();
iCoeEnv
->ScreenDevice()->ReleaseFont(font);

3、关于SVG图像的显示
我将所有的数字小图片都做成SVG格式,在显示SVG图像的时候必须设置它的尺寸,否则也无法显示。另外,因为制作时它的背景色为白色,所以要显示为透明则需要用到它的MASK了。
for(TInti=0,j=0;i<9;i++,j+=2)...{
CFbsBitmap
*b=NULL;
CFbsBitmap
*c=NULL;
AknIconUtils::CreateIconL(b,c,iMFileName,EMbmSudoscY1
+j,EMbmSudoscY1+j+1);
AknIconUtils::SetSize(b,TSize(
22,22));
AknIconUtils::SetSize(c,TSize(
22,22));
iThumbNormal.AppendL(b);
iThumbNormalMask.AppendL(c);
}

iThumbNormal和iThumbNormalMask是两个RPointerArray<CFbsBitmap>对象,这里我在ContructL时就加载所有的数字图,这种方法可以有效地减轻在重绘时加载照成的闪屏。然后在显示时这样即可:
if(CSuDoScHelper::CheckGrid(iGrid,i%9,i/9,iGrid[i].value))
gc.BitBltMasked(TPoint(xx,yy),iThumbNormal[iGrid[i].value
-1],r,iThumbNormalMask[iGrid[i].value-1],EFalse);
else
gc.BitBltMasked(TPoint(xx,yy),iThumbError[iGrid[i].value
-1],r,iThumbErrorMask[iGrid[i].value-1],EFalse);

4、关于按键处理
我仍是按BREW手机的模式,左软键菜单,右软键切换模式,*#则用来切换题目。在Symbian中对键值的定义比其它平台要复杂一些,让人有点摸不着头脑,比如数字健没有定义在头文件中(不是那个EStdKeyNkp1等枚举),只能自己去尝试一下:
TKeyResponseCSuDoScAppView::OfferKeyEventL(constTKeyEvent&aKeyEvent,TEventCodeaType)
...{
if(aType==EEventKeyUp)
...{
if(aKeyEvent.iScanCode>=EStdKeyLeftArrow&&aKeyEvent.iScanCode<=EStdKeyDownArrow)
returnTreatNavKey(aKeyEvent,aType);
elseif(aKeyEvent.iScanCode>=48&&aKeyEvent.iScanCode<=57)
returnTreatNumKey(aKeyEvent,aType);
elseif(aKeyEvent.iScanCode==EStdKeyDevice1||aKeyEvent.iScanCode==EStdKeyHash||aKeyEvent.iScanCode==EStdKeyNkpAsterisk)
returnTreatChrKey(aKeyEvent,aType);
}

returnEKeyWasConsumed;
}

5、关于消息对话框
在显示“解题成功”的对话框时,记得不要画蛇添足地去消除对话框,如下面代码中注掉的代码是多余的:
TBoolCSuDoScAppView::ShowSuccessDlg()
...{
if(iState==EGSTATE_WRITE&&CSuDoScHelper::CheckSuccess(iGrid))...{
TBuf
<32>str;
iCoeEnv
->ReadResource(str,R_TEXT_SUCCESS);
CAknInformationNote
*dlg=new(ELeave)CAknInformationNote(ETrue);
//CleanupStack::PushL(dlg);

dlg
->ExecuteLD(str);
//CleanupStack::PopAndDestroy(1);

returnETrue;
}

returnEFalse;
}

暂时就这些吧。
分享到:
评论

相关推荐

    Symbian学习笔记.pdf

    ### Symbian学习笔记知识点概览 #### 一、Symbian系统简介 - **Symbian** 是一款由Symbian有限公司开发的移动操作系统,主要用于智能手机和平板电脑。该系统以其高度定制化能力和强大的多媒体功能著称,在早期智能...

    Symbian学习笔记

    这些学习笔记涵盖了Symbian开发的多个关键方面,包括调试、基础概念、应用框架、图形用户界面(GUI)开发、多线程处理、定时器、系统集成以及网络通信。 1. **Debug On Device**: 在设备上进行调试是开发过程中的...

    宇宙人.zip

    宇宙人.zip

    基于CarSim和Simulink的ACC自适应巡航控制系统联合仿真的研究与应用

    内容概要:本文介绍了基于CarSim和Simulink的ACC自适应巡航控制联合仿真模型。该模型由两部分组成:上层控制器采用ACC策略,负责根据车辆周围环境调整车速和跟车距离;下层控制器采用PID控制,确保车辆准确跟随上层指令。此外,还包含车辆逆动力学模型,用于模拟真实车辆的动态响应。文中详细解释了cpar文件的作用及其参数设置方法,并展示了如何在Simulink中搭建PID控制器。通过仿真,验证了模型在复杂道路环境下的有效性,展示了车辆能够根据前方车辆的速度和距离自动调整车速和跟车距离,保持安全行驶。 适合人群:从事自动驾驶技术研发的工程师和技术研究人员。 使用场景及目标:适用于需要对ACC系统进行深入研究和测试的场景,旨在帮助研发人员更好地理解和优化ACC策略,提高自动驾驶的安全性和可靠性。 其他说明:该模型为自动驾驶技术的研发提供了有效工具,有助于推动相关技术的进步和发展。

    异业联盟红包拓客 2.12.2.zip

    异业联盟红包拓客 2.12.2.zip

    Simulink锂离子电池模型:设定功率充放电与实时监测的电池管理工具

    内容概要:本文详细介绍了Simulink锂离子电池模型的功能和技术解析。该模型主要用于模拟锂离子电池的充电和放电过程,能够设定功率进行充放电并实时监测电池的电压、电流、温度和SOC。它提供了数据输入与设置、实时监测与数据分析等功能,确保了模型的准确性和可靠性。通过该模型,工程师可以深入了解电池的性能特点,预测其在实际使用中的表现,从而为产品研发和优化提供依据。 适合人群:从事电动汽车、可再生能源以及储能系统研究和开发的工程师和技术人员。 使用场景及目标:①电动汽车研发:模拟电池性能,提升车辆性能和稳定性;②可再生能源领域:分析电池特性,促进能源开发和利用;③储能系统仿真:优化储能系统设计,提高电力系统效率。 其他说明:该模型不仅适用于特定领域的研究,还可扩展到其他需要模拟和分析电池性能特点的领域。

    实训商业源码-飞飞CMS最新版本DC04电脑端网站模板-毕业设计.zip

    实训商业源码-飞飞CMS最新版本DC04电脑端网站模板-毕业设计.zip

    新能源电动汽车VCU与BMS硬件在环仿真:多模块整合的整车建模与HIL系统实现

    内容概要:本文详细介绍了新能源电动汽车中VCU(车辆控制单元)和BMS(电池管理系统)的硬件在环(HIL)仿真技术及其重要性。文中阐述了VCU和BMS在电动汽车中的角色,解释了硬件在环仿真技术的概念及其在电动汽车研发中的应用。重点讨论了电动汽车整车建模的方法,涵盖驾驶员模块、仪表模块、BCU整车控制器模块、MCU电机模块、TCU变速箱模块、减速器模块、BMS电池管理模块等多个子系统的建模。此外,文章还探讨了HIL仿真的具体应用场景和优势,强调其在降低成本、提高效率和安全性方面的作用。 适合人群:从事新能源汽车研发的技术人员、研究人员及相关领域的学生。 使用场景及目标:适用于希望深入了解电动汽车VCU和BMS硬件在环仿真技术的研究人员和技术人员,旨在帮助他们掌握相关技术和工具,提升电动汽车的研发和测试能力。 其他说明:文章提供了详细的模块介绍和仿真技术的应用案例,有助于读者更好地理解和应用HIL仿真技术于实际项目中。

    实训商业源码-手动安装视频教程-毕业设计.zip

    实训商业源码-手动安装视频教程-毕业设计.zip

    电力电子领域中两相交错并联Boost变换器的模型预测控制及Matlab Simulink仿真

    内容概要:本文探讨了模型预测控制(MPC)在两相交错并联Boost变换器中的应用,特别是在Matlab/Simulink环境下对其快速响应、均流特性的仿真研究。文中介绍了MPC的基本概念,强调了它在应对电压跳变和负载突变时的优势。同时,还比较了纯MPC与PI+MPC两种控制方法的效果,指出后者在稳态误差和响应速度方面表现更优。 适合人群:从事电力电子、自动化控制领域的研究人员和技术工程师。 使用场景及目标:适用于需要深入了解MPC理论及其在具体硬件平台上的实施细节的人群;旨在提升电力转换设备的效率和可靠性。 其他说明:文章提供了详细的实验数据和图表支持,有助于读者直观理解不同控制策略下系统的动态行为。此外,文中提及的所有仿真均是在Matlab/Simulink平台上完成的,这为后续的实际工程应用打下了坚实的基础。

    实训商业源码-炫酷恶趣强大的制作神器小程序源码_支持多种流量主模式-毕业设计.zip

    实训商业源码-炫酷恶趣强大的制作神器小程序源码_支持多种流量主模式-毕业设计.zip

    DSP28335芯片基于Bootloader与CAN通信的在线固件升级解决方案

    内容概要:本文详细介绍了DSP28335芯片通过Bootloader和CAN通信实现在线固件升级的方法。首先解释了Bootloader的工作原理,即芯片上电后运行固化在Flash中的Bootloader程序,通过CAN接收新固件数据,擦除旧程序并写入新程序,最后跳转到用户程序执行。文中提供了具体的CAN初始化代码(如设置CCR配置位)以及上位机Python代码用于发送固件数据。还特别提到了版本校验的重要性,并给出了一种优化后的CRC32校验算法。此外,文档中提到一些常见问题及其解决方案,如CAN设备丢包问题和硬件干扰问题。 适合人群:嵌入式系统开发者、DSP芯片使用者、固件开发工程师。 使用场景及目标:适用于需要对DSP28335或其他类似DSP芯片进行固件升级的场景,帮助用户掌握Bootloader的应用和CAN通信的具体实现方法,确保固件升级的成功率。 其他说明:文档不仅提供理论讲解,还有详细的代码示例和操作步骤,甚至包括了一些实际操作中遇到的问题及解决方案,非常适合初学者和有一定经验的研发人员学习和参考。

    实训商业源码-电影门户苹果CMS主题模板下载-毕业设计.zip

    实训商业源码-电影门户苹果CMS主题模板下载-毕业设计.zip

    基于骨骼三维信息结合隐马尔科夫模型人体动作识别方法.pdf

    基于骨骼三维信息结合隐马尔科夫模型人体动作识别方法.pdf

    锂电池SOC与BMS:基于2-RC模型的MATLAB Simulink仿真及PCB电路设计

    内容概要:本文详细探讨了锂电池的SOC(荷电状态)与BMS(电池管理系统)的关系,重点介绍了2-RC模型及其在BMS中的应用。文中通过MATLAB Simulink进行仿真,展示了如何测试和验证SOC估算算法的精度,并讨论了提高算法精度的方法和技术。此外,还深入探讨了均衡模型的实现及其对电池组一致性的改善,最后介绍了BMS硬件电路PCB设计的关键步骤。 适合人群:从事电池管理系统的工程师、研究人员以及对锂电池技术和仿真有兴趣的技术爱好者。 使用场景及目标:适用于希望深入了解锂电池SOC估算、BMS系统设计、仿真测试及硬件电路设计的专业人士。目标是提升对锂电池管理和仿真的理解和技能。 其他说明:文章不仅涵盖了理论知识,还包括具体的代码示例和实际应用场景,有助于读者全面掌握相关技术并应用于实践中。

    实训商业源码-小说系统-毕业设计.zip

    实训商业源码-小说系统-毕业设计.zip

    永磁同步电机转速环ADRC控制仿真实现及应用

    内容概要:本文详细介绍了永磁同步电机(PMSM)转速环采用自抗扰控制(ADRC)进行仿真的方法和技术细节。首先解释了ADRC的核心组成部分:跟踪微分器(TD)、扩张状态观测器(ESO)和非线性反馈(NLSEF),并通过MATLAB代码展示了ESO的具体实现方式。接着给出了PMSM的机械运动方程及其Python代码实现,强调了负载转矩作为主要扰动源的影响。文中对比了ADRC与传统PID控制器在面对负载突变时的表现,指出ADRC能够更快地响应并稳定系统。最后提供了ADRC参数调整的经验技巧,如TD和ESO带宽的选择以及非线性因子α的限制条件。 适用人群:对永磁同步电机控制系统感兴趣的工程技术人员、研究人员及高校相关专业学生。 使用场景及目标:适用于需要提高永磁同步电机转速环鲁棒性和动态性能的应用场合,如工业自动化设备、电动汽车驱动系统等。目标是掌握ADRC的工作原理及其在PMSM控制中的具体应用方法。 其他说明:文中提供的代码片段和参数设定建议为实际项目实施提供了宝贵的参考资料,有助于缩短开发周期并提升系统的可靠性。

    CST仿真技术解析:极化转换与非对称传输特性的建模与优化

    内容概要:本文详细介绍了利用CST Studio进行极化转换和非对称传输仿真的方法和技术要点。首先讲解了如何通过参数化建模构建用于极化转换的关键结构(如箭头型金属贴片),并强调了参数化设计的优势。接着讨论了边界条件和端口设置的具体步骤,确保仿真结果的准确性。随后提供了电场矢量图的后处理脚本,帮助直观判断极化转换的效果。最后探讨了非对称传输特性的验证方法,包括参数扫描和数据处理技巧。文中还分享了一些常见的仿真陷阱及其解决方案。 适合人群:从事微波工程、天线设计以及电磁兼容性研究的专业人士,尤其是有一定CST仿真经验的研究人员。 使用场景及目标:适用于需要深入理解和掌握CST仿真工具在极化转换和非对称传输领域的应用场合。目标是提高仿真精度,优化设计方案,缩短研发周期。 其他说明:文章不仅提供具体的技术细节,还包括实用的经验分享和避坑指南,有助于读者快速上手并解决实际问题。

    运动步数宝步步换购小程序 V4.5.1.zip

    运动步数宝步步换购小程序 V4.5.1.zip

    多类别农产品目标检测数据集.zip

    数据集介绍:多类别农产品目标检测数据集 一、基础信息 数据集名称:多类别农产品目标检测数据集 图片数量: - 训练集:2,873张图片 - 验证集:738张图片 - 测试集:357张图片 总计:3,968张标注图片 分类类别: 覆盖36种常见农产品,包括: - 水果类:苹果、香蕉、蓝莓、樱桃、葡萄、猕猴桃、桃子、梨、菠萝、西瓜等 - 蔬菜类:朝鲜蓟、芦笋、甜菜、西兰花、卷心菜、胡萝卜、黄瓜、茄子、羽衣甘蓝、洋葱、南瓜、菠菜等 - 其他作物:玉米、马铃薯、红薯、西葫芦等 标注格式: YOLO格式,包含边界框和类别编号,支持主流目标检测框架直接调用。 数据特性: 覆盖农产品生长周期不同阶段的形态,包含复杂田间背景下的目标检测场景。 二、适用场景 农业自动化分拣系统: 支持开发果蔬分拣机器人视觉模块,实现多品类农产品的自动识别与定位。 智能农业监测系统: 用于田间作物生长监测,支持产量预估、成熟度判断等农业AI应用开发。 食品加工质检应用: 可训练模型检测农产品外观缺陷,适用于食品加工流水线质量控制系统。 农业学术研究: 为精准农业、农业机器人等研究方向提供标准化检测数据集。 农业教育工具: 适用于农业院校教学实验,帮助学生学习AI在农业场景的应用实践。 三、数据集优势 类别丰富性强: 涵盖36种全球主流农产品,包含水果、蔬菜、根茎作物等多品类目标,满足复杂农业场景需求。 标注专业度高: 采用YOLO标准格式标注,所有边界框均经过人工校验,确保遮挡目标、小目标标注准确性。 数据平衡性好: 各类别样本量经均衡处理,避免长尾分布问题,适合工业级模型训练。 应用扩展性强: 除目标检测外,支持扩展至产量统计、尺寸测量等农业计算机视觉任务。 实际价值突出: 数据采集自真实农业场景,包含不同光照条件、遮挡情况的样本,可直接部署于农业智能化应用。

Global site tag (gtag.js) - Google Analytics