WAP之家:为您提供最全最新的WAP技术,CP.SP.3G等行业资讯。 WAP之家交流论坛全新开放 点击进入>>
WAP资讯 | 3G动态 | SP动态 | 运营商动态 | 内容商动态 | 制造商动态 | 论坛讨论>> 每次自动访问
WAP技术 | WAP源码 | 手机编程 | 手机源码 | 无线技术 | J2ME技术 | 手机软件 添加到收藏夹
IVR技术 | SP资料 | SMS MMS技术 | 商业方案 | IVR下载 | 书籍教程 | 工具软件 语言:繁體中文

WAP之家技术文章手机编程Symbian程序开发Graphics(5)

Graphics(5)
作者:剑走偏锋  来源:www.sf.org.cn  发布时间:2005-12-20 2:07:18
 日志又扔了两天.主要原因是出去玩了,玩了24个小时,休息了24个小时,正好两天.

    Sprites是一副遮挡的图或者几副遮挡的图,可以在背景上或者其他的Sprites上面移动的图.这个东东不用应用程序必须去redraw下面的窗口.简单的说就是一种可以移动的图片,几乎所有游戏都会用到的呃.你可以在用到的时候自己创建Sprites类.试用时间器或者自动的重画方法来使图片动起来.加之Symbian OS包含了一个现成的RWsSprite类,提供了一个时间器来控制图片在规定的时间内自动redraw和变化.

    创建一个Sprites:
    1.创建一个新的RwsSprite
    2.根据需要创建多个TSpriteMembers,并把他们添加到Sprites里面.
    3.激活Sprites.

    每一个Sprites包含一个或多个TSpriteMembers,他们定义了Sprites包含的所有图片资源.每一个成员(TSpriteMembers)包括:
    1.Sprites的成员图片(iBitmap)
    2.Srpites的遮挡(iMaskBitmap),如果不使用则设置为空.
    3.是否使用反相遮挡(iInvertMask),如果设置为Efalse则表示未使用反相遮挡,即黑色为透明.
    4.iOffset设置便宜量,定义Srpites的中心.
    5.iInterval设置成员的可见时间.
    6.iDrawMode显示模式,只是在无遮挡的情况下才会使用.

    下面代码演示了如何从一个MBM文件中载入图片,激活Srpites.
以下内容为程序代码:
// .h

RWsSprite      iMySprite;

TSpriteMember  iMySpriteMembers[7];

 

// .cpp

void CMyGameAppView::ConstructL(const TRect& aRect)

   {

    CreateWindowL();

    SetRect(aRect);

 

   // The mbm contains:

   // SpriteImage1.bmp

   // * Every second image is a mask.

   // SpriteImage1Mask.bmp 

   // . . .

   _LIT(KMySpriteMBM, "MySprite.mbm";

   TFileName mbmFileName(KMySpriteMBM);

   CompleteWithAppPath(mbmFileName);

 

   // Construct my sprite

   iMySprite = RWsSprite( CEikonEnv::Static()->WsSession() ;

   User::LeaveIfError( iMySprite.Construct( Window(), 

      TPoint(0,0), 0  ;

   

   // Load bitmaps (image+mask) and set properties for each member;

   // 7 members in total (7 images + 7 masks)

   for ( TInt i = 0; i < 7; i ++ 

      {

      // Load image

      iMySpriteMembers[i].iBitmap = new ( ELeave  CFbsBitmap();

      User::LeaveIfError( iMySpriteMembers[i].iBitmap->Load(

          mbmFileName,  i * 2, EFalse  ;

 

      // Load mask for the image

      iMySpriteMembers[i].iMaskBitmap = new ( ELeave  CFbsBitmap();

      User::LeaveIfError( iMySpriteMembers[i].iMaskBitmap->Load( 

         mbmFileName, i * 2 + 1, EFalse  ;

 

      // Set properties for the member

      iMySpriteMembers[i].iInvertMask = EFalse;

      iMySpriteMembers[i].iOffset = TPoint(0,0);

      // Change image every 1/10 seconds

      iMySpriteMembers[i].iInterval = 

         TimeIntervalMicroSeconds32(100000);

 

      // Append created member to sprite

      User::LeaveIfError( iMySprite.AppendMember( 

         iMySpriteMembers[i]  ;

      }

 

   // All members added. Activate the sprite; the sprite will be 

   // drawn/animated continuously to view until sprite is destroyed 

   // with iMySprite.Close()

   User::LeaveIfError(iMySprite.Activate());

 

   ActivateL();

}


    当一个Sprites建立以后,在他的存在期里,将自动重画和活动.我们只需要改变他在游戏中的存在的点就可以了.
以下内容为程序代码:
void CMyGameAppView::MoveMySpriteTo(const TPoint& aPos)

   {

   iMySprite.SetPosition(aPos);

   }


    有时候必须更改一些图片的内容,以为每一个成员的图片只是普通的CFbsBitmap,只是图片的控制信息被发送到窗口服务.在添加成员的时候,图片的控制权并不会改变.图片的内容可以在任意时间内改变,我们只需要修改成员的iBitmap和iMaskBitmap就可以了.修改了以后,你可以调用iMySprite.UpdateMember(index)立刻应用修改,否则可能会等一段时间才能看到修改的内容.

    注意,这里不能使用以前的方法来改变图片的大小了.如果想改变或者完全替换原来的图片,你必须新建一个TSpriteMember,使用UpdateMember(TInt aIndex, const TSpriteMember& aMemberData).
[] [返回上一页] [打 印]
文章评论

用户名: 查看更多评论

分 值:100分 85分 70分 55分 40分 25分 10分 0分

内 容:

         (注“”为必填内容。) 验证码: 验证码,看不清楚?请点击刷新验证码