自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Symbian學(xué)習(xí)筆記(8)——再嘗試著做一個(gè)數(shù)獨(dú)游戲

系統(tǒng)
仍是做一個(gè)同樣界面同樣功能的數(shù)獨(dú)游戲,但是所花費(fèi)的時(shí)間遠(yuǎn)遠(yuǎn)超出我用Android或者J2ME來做同樣的事情,當(dāng)然運(yùn)行效率也很明顯(我將J2ME實(shí)現(xiàn)的數(shù)獨(dú)放在N73上跑過,因?yàn)橹乩L屏幕的代碼沒有優(yōu)化,所以效果不好,但同樣的算法在BREW或者Symbian上就跑得相當(dāng)順暢)。
仍是做一個(gè)同樣界面同樣功能的數(shù)獨(dú)游戲,但是所花費(fèi)的時(shí)間遠(yuǎn)遠(yuǎn)超出我用Android或者J2ME來做同樣的事情,當(dāng)然運(yùn)行效率也很明顯(我將J2ME實(shí)現(xiàn)的數(shù)獨(dú)放在N73上跑過,因?yàn)橹乩L屏幕的代碼沒有優(yōu)化,所以效果不好,但同樣的算法在BREW或者Symbian上就跑得相當(dāng)順暢)。

  這次我主要談?wù)勗谧鲞@個(gè) Symbian版本中遇到的幾個(gè)問題,希望以后自己不要再犯同樣的錯(cuò)誤了。

  1、多視圖的應(yīng)用程序框架的問題

  我用的是Carbide C++ IDE環(huán)境,不知道為什么不能生成多視圖的架子,所以只能在HelloWorld框架的代碼上自己手工改寫,結(jié)果就弄出一個(gè)Panic折騰了我很久,問題出在千萬不要在析構(gòu)函數(shù)中去刪除創(chuàng)建的CAknView,如下代碼(注掉是正確的,否則就在退出應(yīng)用時(shí)會(huì)出錯(cuò)):

CSuDoScAppUi::~CSuDoScAppUi()
...{
//    if(iAppCtrol!=NULL){
//        this->RemoveView(iAppCtrol->Id());
//        delete iAppCtrol;
//        iAppCtrol=NULL;
//        
//        RDebug::Printf("delete iAppCtrol");
//    }
//    RDebug::Printf("delete Ui");
}
 

  我們需要負(fù)責(zé)清除對(duì)象的地方是在CAknView中負(fù)責(zé)刪掉CCoeControl,因?yàn)樵谒腄oActivateL/DoDeactivateL兩個(gè)函數(shù)中負(fù)責(zé)創(chuàng)建和刪除CoeControl,但是如果退出時(shí)這個(gè)DoDeactivateL是不會(huì)主動(dòng)調(diào)用的,因此在析構(gòu)時(shí)可以調(diào)用一下它:

 

CSuDoScAppCtrol::~CSuDoScAppCtrol()
...{
    iFs.Close();
    iList.Close();

    DoDeactivate();
   
    RDebug::Printf("delete Ctrol");
}
 

  2、關(guān)于顯示字體的問題

  在調(diào)用CWindowGc的DrawText方法時(shí),必須要設(shè)置一下字體否則不會(huì)有東西顯示出來,而設(shè)置字體有一段標(biāo)準(zhǔn)代碼可以參考(來源于網(wǎng)上):

 

CWindowGc& gc = SystemGc();
    CFont *font = NULL;
    TFontSpec fontSpec = iEikonEnv->LegendFont()->FontSpecInTwips();
    fontSpec.iHeight  -= fontSpec.iHeight / 6;   

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

        // do sth.

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

  3、關(guān)于SVG圖像的顯示

  我將所有的數(shù)字小圖片都做成SVG格式,在顯示SVG圖像的時(shí)候必須設(shè)置它的尺寸,否則也無法顯示。另外,因?yàn)橹谱鲿r(shí)它的背景色為白色,所以要顯示為透明則需要用到它的MASK了。

 

for(TInt i=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是兩個(gè)RPointerArray對(duì)象,這里我在ContructL時(shí)就加載所有的數(shù)字圖,這種方法可以有效地減輕在重繪時(shí)加載照成的閃屏。然后在顯示時(shí)這樣即可:

 

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、關(guān)于按鍵處理

  我仍是按BREW手機(jī)的模式,左軟鍵菜單,右軟鍵切換模式,*#則用來切換題目。在Symbian中對(duì)鍵值的定義比其它平臺(tái)要復(fù)雜一些,讓人有點(diǎn)摸不著頭腦,比如數(shù)字健沒有定義在頭文件中(不是那個(gè)EStdKeyNkp1等枚舉),只能自己去嘗試一下:

 

TKeyResponse CSuDoScAppView::OfferKeyEventL(const TKeyEvent& aKeyEvent,TEventCode aType)
    ...{
        if(aType==EEventKeyUp)
        ...{
            if( aKeyEvent.iScanCode>=EStdKeyLeftArrow && aKeyEvent.iScanCode<=EStdKeyDownArrow)
                return TreatNavKey(aKeyEvent,aType);
            else if( aKeyEvent.iScanCode>=48 && aKeyEvent.iScanCode<=57)
                return TreatNumKey(aKeyEvent,aType);
            else if( aKeyEvent.iScanCode==EStdKeyDevice1 || aKeyEvent.iScanCode==EStdKeyHash || aKeyEvent.iScanCode==EStdKeyNkpAsterisk)
                return TreatChrKey(aKeyEvent,aType);            
        }
        return EKeyWasConsumed;
    }

  5、關(guān)于消息對(duì)話框

  在顯示“解題成功”的對(duì)話框時(shí),記得不要畫蛇添足地去消除對(duì)話框,如下面代碼中注掉的代碼是多余的:

 

TBool CSuDoScAppView::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);   
        
        return ETrue;
    }
    return EFalse;
}

  暫時(shí)就這些吧。

【編輯推薦】

  1. Symbian每6個(gè)月發(fā)布一款新開源操作系統(tǒng)
  2. 微軟建WindowsMarketplace 完善智能機(jī)平臺(tái)
  3. 大力模仿Android 傳微軟WM6.5可裝插件
責(zé)任編輯:龐桂玉 來源: it168
相關(guān)推薦

2021-12-17 10:06:42

鴻蒙HarmonyOS應(yīng)用

2009-04-12 09:02:32

Symbian諾基亞移動(dòng)OS

2009-04-12 09:06:00

Symbian諾基亞移動(dòng)OS

2009-04-12 08:59:05

Symbian諾基亞移動(dòng)OS

2009-04-12 09:00:08

Symbian諾基亞移動(dòng)OS

2009-04-12 09:01:05

Symbian諾基亞移動(dòng)OS

2009-04-12 09:03:50

Symbian諾基亞移動(dòng)OS

2009-04-12 08:57:50

Symbian諾基亞移動(dòng)OS

2013-08-19 10:45:36

社交游戲手機(jī)游戲

2009-04-12 08:55:18

Symbian諾基亞移動(dòng)OS

2022-07-29 14:47:34

數(shù)獨(dú)Sudoku鴻蒙

2009-04-12 08:36:09

Symbian諾基亞移動(dòng)OS

2013-06-17 12:44:38

WP7開發(fā)Windows Pho數(shù)獨(dú)游戲

2022-10-19 15:19:53

數(shù)獨(dú)Sudoku鴻蒙

2022-10-19 15:27:36

數(shù)獨(dú)Sudoku鴻蒙

2022-10-18 15:45:17

數(shù)獨(dú)Sudoku鴻蒙

2015-07-03 11:27:30

程序員自己神器

2011-06-16 15:36:56

Qt Quick Symbian

2009-04-12 08:51:50

Symbian諾基亞移動(dòng)OS

2021-12-23 09:50:46

Python游戲腳本
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)