当前位置:编程学习 > wap >>

关于SYMBIAN源码中有段问题,请教大家(求解,在线等待)

1.-------------------------------------------------------------------------------------------------------------
在这个源码中定义了个MMODEL iCurrentModel和RPointerArray< MModel >iModel,iCurrentModel他是个纯虚类。iModel分别添加了A1,A2,A3。A1到A3都实例化了ActivateL()。不过这里遇到一个问题
 iGameModel = CModelGame::NewL( this );
iModel.Append( CModelTitle::NewL( this ) );
iModel.Append( iGameModel );
iModel.Append( CModelHelp::NewL( this ) );

iChangeModel = EFalse;

iCurrentModel = iModel[ EModelTitleScreen ];// EModelTitleScreen?
iCurrentModel->ActivateL();//这个ActivateL()具体是调用那个的了?
iCurrentModel->ActivateL();这个ActivateL()具体调用那个了是3个都调用还是,只调用一个了?

2.-------------------------------------------------------------------------------------------------------------
关于位图,我接触的位图知识使用CompleteWithAppPath(file);Load(file);
在这个源码中为什么使用备份位图了?哪位大哥能帮我介绍下这个备份位图的作用,为什么要使用他了?
CreateBackedUpWindowL( CCoeEnv::Static()->RootWin() );//RootWin();这个函数有什么用了,这个源码中很多地方使用到
BackedUpWindow().MaintainBackup();
TInt wh = BackedUpWindow().BitmapHandle();
SetExtentToWholeScreen();
TInt wh = BackedUpWindow().BitmapHandle();
iBitmap.Duplicate( wh );
3-------------------------------------------------------------------------------------------------------------
case EColor4K:
{
longword = aRgb.Color4K();
//Color4K()获取价值指数最接近TRgb这个基础上,匹配的显示模式。
longword |= longword << 16;//???这段代码什么左右,|=  
break;
}

4-------------------------------------------------------------------------------------------------------------
还有这段代码,始终没有理解
for(  i=0; i<8; i++ )
{
file.Copy( iSystem->Path() );
file.Append( _L("player.mbm" ) );
CBitmap* bmPlayer = CBitmap::NewL( file,  i );
bmPlayer->SetMaskColor( 0 );
iSprPlayer->AddSpriteBmp( bmPlayer );//添加子画面。这里调用void CSprite::AddSpriteBmp
}
void CSprite::AddSpriteBmp( CBitmap* aBitmap )
{
iBitmaps.Append( aBitmap );
}
//这怎么使用循环,那不是重复创建BITMAP?重复执行?player.mbm确实存在,那不是添加了8次,就是8份地图了?? --------------------编程问答-------------------- 5------------------------------------------------------------------------------------
TInt CTileMap::Tile( const TPoint& aPixel, TInt aLayer )
{
TInt x = aPixel.iX / 8;
TInt y = aPixel.iY / 8;
if( x>=0 && y>=0 && x<iSize.iWidth && y<iSize.iHeight )
{
return iMap[ aLayer ][ x + y * iSize.iWidth ];//?
}

return KEmptyTile;
}
其中const TUint8* iMap[ 3 ];如果这是定义为数组的话,也是一维数组,怎么运行中变成二维数组了
SYMBIAN中可以这样改变吗? --------------------编程问答-------------------- 1. EModelTitleScreen应该是枚举定义,查看一下其定义即可知其值。从给出的代码来看值应该是0, 就是对应CModeTitle实例。
2. 理解BackupWindow建议阅读RBackedUpWindow类说明
3. 应与longword的使用方式有关,建议阅读后面相关代码。
4. 建议阅读CBitmap::NewL的实现代码。猜测:player.mbm中至少有8张图,依次读入,可能是用于播放动画
5. const TUint8* iMap[ 3 ]; 这是个c/c++基础问题,要看仔细了。若是一维数组每个元素是什么;若是二维数组每个元素又是什么 --------------------编程问答-------------------- 关注,学习下! --------------------编程问答-------------------- TO:dyw 谢谢 你的解答.
不过对于:4. 建议阅读CBitmap::NewL的实现代码。猜测:player.mbm中至少有8张图,依次读入,可能是用于播放动画
实质是:player.mbm只是一个文件,不知道是不是这样理解你的意思,就是说一个文件中存在8张地图? --------------------编程问答-------------------- 学习~~ --------------------编程问答-------------------- file.Copy( iSystem->Path() );
file.Append( _L("player.mbm" ) );

for( i=0; i<8; i++ )
{
CBitmap* bmPlayer = CBitmap::NewL( file, i );
bmPlayer->SetMaskColor( 0 ); 
iSprPlayer->AddSpriteBmp( bmPlayer );//添加子画面。这里调用void CSprite::AddSpriteBmp
}

void CSprite::AddSpriteBmp( CBitmap* aBitmap )
{
iBitmaps.Append( aBitmap );
}

iBitmaps是一个数组,数组里面存入了从player.mbm读入的图片(应该>=8张),用完了要删除。

有些问题你可以问你的师傅。
--------------------编程问答-------------------- 还有个问题就是,有个这样的数组:bl_types[4][numBlocks]=
{
{0x4444,0x0e20,0x0740,0x06c0,0x6600,0xe400},
{...},
{...},
{...},
}
这些0X,是什么意思了,在实例中说这些是具体的形状,难道这些形状可以用这些0X,代表?
具体形状不是用位图来显示的吗? --------------------编程问答-------------------- 非常感谢各位帮我解释,不过是自学的,所以,有很多问题在实际问题解释不了 --------------------编程问答-------------------- 这个讨论不错,加精了。 --------------------编程问答-------------------- 好,,,,,,, --------------------编程问答-------------------- --------------------编程问答-------------------- --------------------编程问答-------------------- --------------------编程问答-------------------- 看不懂 --------------------编程问答-------------------- 好  很哈 不过  我也没看懂!! --------------------编程问答-------------------- 学习 学习 --------------------编程问答-------------------- --------------------编程问答-------------------- --------------------编程问答-------------------- --------------------编程问答-------------------- 关注,看看。 --------------------编程问答-------------------- jian chi jiu shi sheng li .he ping nizhidaoma  --------------------编程问答-------------------- 这个看不懂,只是路过。兄弟加油! --------------------编程问答-------------------- 掌学习了 --------------------编程问答-------------------- --------------------编程问答-------------------- 好  不过我都是 是没是啊飞飞
个 --------------------编程问答-------------------- 这是不错啊。努力努力 --------------------编程问答-------------------- --------------------编程问答-------------------- --------------------编程问答--------------------
引用 4 楼 hyh1000 的回复:
TO:dyw 谢谢 你的解答.
不过对于:4. 建议阅读CBitmap::NewL的实现代码。猜测:player.mbm中至少有8张图,依次读入,可能是用于播放动画
实质是:player.mbm只是一个文件,不知道是不是这样理解你的意思,就是说一个文件中存在8张地图?

mbm可以包含多张位图,可以用mbmviewer工具打开查看。这个工具也随sdk附带。 --------------------编程问答-------------------- --------------------编程问答-------------------- --------------------编程问答-------------------- 谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢 --------------------编程问答-------------------- 最近比较烦路过来看看 --------------------编程问答-------------------- --------------------编程问答-------------------- --------------------编程问答-------------------- 关注~~ --------------------编程问答-------------------- 阿,真的很高兴,也真的很谢谢大家。我是自学SYMBIAN的,从中遇到很多问题,都是自己解释,也有很多群,不过,可能我的问题很肤浅,很白痴,所以,没有什么人来解答,在这里多谢大家的支持,谢谢,遇到这么多的朋友的关注,谢谢 --------------------编程问答-------------------- 有没有大侠指点的啊
学习下 --------------------编程问答-------------------- --------------------编程问答-------------------- 还不错啊 支持一下 --------------------编程问答-------------------- --------------------编程问答-------------------- 学习了 --------------------编程问答-------------------- 一点都看不懂 --------------------编程问答-------------------- --------------------编程问答-------------------- --------------------编程问答-------------------- 学习下 --------------------编程问答-------------------- 看不懂哦~! --------------------编程问答-------------------- --------------------编程问答-------------------- 学习学习 --------------------编程问答-------------------- qwejkrf;elgrda --------------------编程问答-------------------- 学不会怎么办 --------------------编程问答-------------------- 0x
表示16进制数啊~~~ --------------------编程问答-------------------- 对了,那些16进制数可能是xyz坐标的数值,代表一个点。
最后,Symbian的手机马上就全部停产了,有时间不如去做android~iphone一类的。当然,自己玩玩什么的都没关系 --------------------编程问答-------------------- --------------------编程问答-------------------- --------------------编程问答-------------------- 恩 好 好 不错! --------------------编程问答-------------------- --------------------编程问答-------------------- 朋友们,对不起,这些天没有来,最近我的硬盘坏了,可能不走运,哈哈,可能也是走运,一直使用原来40G硬盘终于要换了,不过,里面的数据丢失了,我的代码,我的AV,哈哈。
说回正题,装了系统,和CARBIDE后我发现S60的S60 5TH SDK中很多函数找不到,原来我使用的S60 3TH SDK,里面的函数都可以查的到,看来又的重新安装。奇怪,所以这段时间分析速度没有跟上来,不过也发现很多问题比如有些操作符 !=这是不等于,但是“=!”这又是什么操作符了?那个位图备份,到底是什么意思,用来干什么,还是没有理解。这16进制有什么用了?不过看来这个原码在这两天可以初步可以分析出来,到时候,看来会出现很多,原来没有知道的东西, --------------------编程问答-------------------- void CExample2DContainer::ConstructL( const TRect& /*aRect*/ )
    {
ControlEnv()->AddForegroundObserverL( *this );
//1:指定前台观察者名单???这个不明不白有什么用?
CreateBackedUpWindowL( CCoeEnv::Static()->RootWin() );
//2.创建一个备份的窗口
BackedUpWindow().MaintainBackup();
//3.获取备份窗口的控制权
SetExtentToWholeScreen();
//4.设置控制的程度,整个屏幕
TInt wh = BackedUpWindow().BitmapHandle();
//5.获取位图的句柄
iBitmap.Duplicate( wh );
//负责一个位图
        #if defined(__WINS__) //?__wins__什么意思???
iBitmap.LockHeap();//锁定位图堆
        #endif

// create TBitmap mirror of iBitmap
TRAPD(err, iBmScreen = CBitmap::NewL( (TUint16*)iBitmap.DataAddress(),
iBitmap.SizeInPixels(), iBitmap.DisplayMode() ));
//DataAddress()获取位图中第一个像素的地址,第一个像素是在左上角

#if defined(__WINS__) 
iBitmap.UnlockHeap();//取消锁定
#endif

User::LeaveIfError(err);

iBmScreen->Clear( TRgb( 0,0,0 ) );//6-1:
TSize s = iBmScreen->Size();
InitPhone();
//7-1:
iPos = CCoeEnv::Static()->RootWin().FullOrdinalPosition();
//这句FullOrdinalPosition();没有理解作用获取窗口的完整序列状态?????????
RFs fs;
        User::LeaveIfError(fs.Connect());
        fs.PrivatePath(iPath);
#ifndef __WINS__
TFileName appFullName = CEikonEnv::Static()->EikAppUi()->Application()->AppFullName();
TParse parse;
         parse.Set( appFullName, NULL, NULL);
         iPath.Insert(0, parse.Drive());
#endif
         fs.Close();
         ActivateL();
    
    // Open MsvSession to get SMS notifications
    iMsvSession = CMsvSession::OpenAsyncL(*this);

iForeGround = ETrue;

    iGameModel = CModelGame::NewL( this );
iModel.Append( CModelTitle::NewL( this ) );
iModel.Append( iGameModel );
iModel.Append( CModelHelp::NewL( this ) );

iChangeModel = EFalse;

iCurrentModel = iModel[ EModelTitleScreen ];
iCurrentModel->ActivateL();

iTiming = CTiming::NewL( this );

LoadMusic();
}

--------------------编程问答-------------------- //6-2:
void CBitmap::Clear( TRgb aRgb )
{
TInt longwords = iSize.iWidth * iSize.iHeight / 2;
TUint32 longword = 0;

switch( iMode )
{
case EColor4K://4096显示模式
{
longword = aRgb.Color4K();
//Color4K()获取这一指数最接近的TRgb价值的基础上,匹配的显示模式
longword |= longword << 16;
break;
}
case EColor64K:
{
longword = aRgb.Color64K();
longword |= longword << 16;
break;
}
default:
{
longword = aRgb.Color16M();
longwords *= 2;
break;
}
}
//这上面可以理解为选择显示匹配模式,
TUint32* p = (TUint32*)iData;
TInt i;
for( i=0; i<longwords; i++ )
{
*p++ = longword;
}//但是这个循环不知道有什么用????
}
//7-2在这里的EStdKeyDevice1代表是啥,不明白,具体是要在S60中重新设定,还是已经设定好了?
void CExample2DContainer::InitPhone()
{
iExitKey = EStdKeyDevice1;
//EStdKeyDevice1设备特定的扫描码 - 通常代表一个在手机上额外的硬件的关键。
iSelectKey = EStdKeyDevice0; 
iOkKey = EStdKeyDevice3;
iBackKey = EStdKeyDevice1;
}//重新设定按键
补充:移动开发 ,  Symbian
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,