android遊戲開發一:背景圖片的移動

野生奧特曼x1發表於2012-10-15

此demo實現螢幕的原理就不每過100毫秒就重新整理背景圖片顯示座標。

程式碼如下:

import java.util.Random;

import android.app.Activity;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.os.Bundle;
import android.util.DisplayMetrics;
import android.util.Log;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;

public class MainActivity extends Activity {
	DisplayMetrics metric;
	float width = 0;
	float height = 0;
	private float startX = 0;
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		//全屏顯示
		requestWindowFeature(Window.FEATURE_NO_TITLE);
		getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
		metric = new DisplayMetrics();
		getWindowManager().getDefaultDisplay().getMetrics(metric);
		width = metric.widthPixels;     // 螢幕寬度(畫素)
		height = metric.heightPixels;   // 螢幕高度(畫素)
		setContentView(new XueshanMap(MainActivity.this));
	}
	
	public class XueshanMap extends View implements Runnable{
		/**背景圖片**/
		private Bitmap bitmap = null;
		/**貼圖**/
		private Bitmap bit2 = null;
		/**計數器**/
		public int count = 0;
		float miDTX = 0; // 代表圖片左邊的橫座標 用來左右移動圖片
		float miDTY = 280; // 代表圖片左邊的橫座標 用來左右移動圖片
		
		private float moveX = 0;
		
		public XueshanMap(Context context) {
			super(context);
			/**獲取背景圖片**/
			bitmap = BitmapFactory.decodeResource(context.getResources(), R.drawable.xueshan);
			/**獲取貼圖**/
			bit2 = BitmapFactory.decodeResource(context.getResources(), R.drawable.frozen1);
			//startX = bitmap.getWidth() - width;
			new Thread(this).start(); 
		}

		@Override
		protected void onDraw(Canvas canvas) {
			// TODO Auto-generated method stub
			super.onDraw(canvas);
			bitmap.getHeight();
			/**建立背景圖片並宣告圖片的長寬**/
			Bitmap bitmap2 = Bitmap.createBitmap(bitmap, 0, 0  
	                , bitmap.getWidth() , bitmap.getHeight());
			/**計數**/
			count++;
			/**每次移動位置**/
			moveX = 0-count*5;
			Random random1 = new Random();
			Random random2 = new Random();
			/**貼圖隨機螢幕X位置**/
			int x = random1.nextInt(100);
			/**貼圖隨機螢幕Y位置**/
			int y = random2.nextInt(100);
			/**繪製顯示的背景圖片座標**/
			canvas.drawBitmap(bitmap2, moveX, 0, null);
			/**繪製顯示的貼圖座標**/
			canvas.drawBitmap(bit2, x , y  , null);
		}
		
		public void run() {
			// TODO Auto-generated method stub
			while (true) {
				/**重新整理**/
                postInvalidate();
                Log.v("MYView HHH", String.valueOf(startX));
                try {
                    Thread.sleep(100);
                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
		}
	}
}



相關文章