移动游戏背景

作者:陈文源


    在android系统上开发游戏的时候,需要处理主角在移动过程中背景的移动,借助于Bitmap的createBitmap方法可以挖取源位图的其中一块,这样可以在程序中通过定时器控制不断地挖取源位图不同位置的块,从而给用户看到背景移动的假象。

以下例子的主角是一架飞机,为了给用户造成飞机不断飞行的错觉,可以通过这种方式来控制背景图片不断下移,用户就会感觉飞机在不断地向上飞行。程序代码如下:


[java]  view plain copy
  1. package com.android;  
  2.   
  3. import java.util.Timer;  
  4. import java.util.TimerTask;  
  5.   
  6. import android.app.Activity;  
  7. import android.content.Context;  
  8. import android.graphics.Bitmap;  
  9. import android.graphics.BitmapFactory;  
  10. import android.graphics.Canvas;  
  11. import android.os.Bundle;  
  12. import android.os.Handler;  
  13. import android.os.Message;  
  14. import android.view.View;  
  15.   
  16. public class MoveBackgroundActivity extends Activity  
  17. {  
  18.     @Override  
  19.     public void onCreate(Bundle savedInstanceState)  
  20.     {  
  21.         super.onCreate(savedInstanceState);  
  22.         setContentView(new MyView(this));  
  23.     }  
  24.     class MyView extends View  
  25.     {  
  26.         //记录背景位图的实际高度  
  27.         final int BACK_HEIGHT = 1700;  
  28.         //背景图片  
  29.         private Bitmap back;  
  30.         private Bitmap plane;  
  31.         //背景图片的开始位置  
  32.         final int WIDTH = 320;  
  33.         final int HEIGHT = 440;  
  34.         private int startY = BACK_HEIGHT - HEIGHT;        
  35.         public MyView(Context context)  
  36.         {  
  37.             super(context);  
  38.             back = BitmapFactory.decodeResource(context.getResources()  
  39.                 , R.drawable.back_img);  
  40.             plane = BitmapFactory.decodeResource(context.getResources()  
  41.                 , R.drawable.plane);              
  42.             final Handler handler = new Handler()  
  43.             {  
  44.                 public void handleMessage(Message msg)  
  45.                 {  
  46.                     if (msg.what == 1)  
  47.                     {  
  48.                         //重新开始移动  
  49.                         if (startY <= 0)  
  50.                         {  
  51.                             startY = BACK_HEIGHT - HEIGHT;  
  52.                         }  
  53.                         else  
  54.                         {  
  55.                             startY -= 3;  
  56.                         }  
  57.                     }  
  58.                     invalidate();  
  59.                 }  
  60.             };  
  61.             new Timer().schedule(new TimerTask()  
  62.             {  
  63.                 @Override  
  64.                 public void run()  
  65.                 {  
  66.                     handler.sendEmptyMessage(1);                      
  67.                 }  
  68.                   
  69.             }, 0 , 100);  
  70.         }  
  71.         @Override  
  72.         public void onDraw(Canvas canvas)  
  73.         {  
  74.             // 根据原始位图和Matrix创建新图片  
  75.             Bitmap bitmap2 = Bitmap.createBitmap(back, 0, startY  
  76.                 , WIDTH , HEIGHT);  
  77.             // 绘制新位图  
  78.             canvas.drawBitmap(bitmap2, 0 , 0  , null);  
  79.             // 绘制飞机  
  80.             canvas.drawBitmap(plane, 160 , 380  , null);                  
  81.         }         
  82.     }  
  83. }  



在程序代码中

Bitmap bitmap2 = Bitmap.createBitmap(back, 0, startYWIDTH , HEIGHT);


这句根据startY控制挖取back位图中不同位置的块,并将它位置在当前View上。

在程序的handleMessage方法中通过定时器来控制startY不断改变,这样可以看到back图片不断下移的效果,用户即可看到飞机向上飞行的错觉。

程序的运行效果如下:


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值