網頁

2010年3月29日 星期一

Android 貼圖教學,透明貼圖教學





遊戲設計最重要的一門課題,貼圖
觀看了月球登入的sample遊戲之後,發現月球登入使用了兩種方式的貼圖
貼圖之前必須要先將圖形放到資源檔裡,專案資料夾下方的res裡的drawable
到了2.0之後的版本,android會自動分出三個資料夾 drawable-h m L dpi 分別是讓開法者存放
不同解析度的圖形,因為現在手機的解析度已經亂的可以,低階手機到高階手機解析度都不一
該怎麼用我也還沒學到,實驗之後發現不管放在哪個資料夾都會自動更新到R.java裡面

關於該放什麼圖檔,還有透明的問題,Android 的貼圖看Sample裡並沒有特別寫到透明的程式碼
如果是Directx 的貼圖還需設定圖形透通顏色色定,不過在Android裡看來是不用寫任何程式碼,只要存放png圖檔,png圖檔本身就支援透明色,設定的透明色於android中的貼圖就自動的透明貼圖了,使用上還蠻方便的,不過這樣反而有個疑問是如果這張圖形是動態產生的,且想要透明怎麼辦
阿栽....... 有需要再來說。
先使用 jetboy裡的太空船,
把他copy到drawable-hdpi
第一種貼圖 宣告成
private Drawable PIC1;
取得資源檔圖形放入Drawable中
PIC1 = this.getResources().getDrawable(R.drawable.ship);

貼圖的方式
PIC1.setBounds(左x, 上y, 右x, 下y); //設定貼出範圍, 自動縮放圖形寬與高
PIC1.draw(canvas); //將圖形貼於canvas 畫布上


第二種貼圖方式
宣告成Bitmap 格式
private Bitmap PICBitmap;
取得資源檔圖形,轉換成Bitmap
PICBitmap = BitmapFactory.decodeResource(this.getResources() ,
R.drawable.ship);
//於x,y 貼出 沒有使用縮放圖形,原圖貼出
canvas.drawBitmap(PICBitmap, x, y, null);



完整程式碼
package com.DrawTest;


import android.app.Activity;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Rect;
import android.graphics.Paint.Style;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.view.View;

public class DrawTest extends Activity {
/** Called when the activity is first created. */
private Drawable PIC1;
private Bitmap PICBitmap;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
MyView myview = new MyView(this);
setContentView(myview);
PIC1 = this.getResources().getDrawable(R.drawable.ship);
PICBitmap = BitmapFactory.decodeResource(this.getResources() ,
R.drawable.ship);
}

private class MyView extends View
{
public MyView(Context context)
{
super(context);
}
@Override
protected void onDraw(Canvas canvas)
{
super.onDraw(canvas);
canvas.drawColor(Color.WHITE);
Paint paint = new Paint();
paint.setAntiAlias(true);
paint.setColor(Color.RED);
paint.setStyle(Style.FILL);
canvas.drawCircle(120, 40, 30, paint);
canvas.drawRect(90,170,150,200, paint);
PIC1.setBounds(10, 10, 100, 100);
PIC1.draw(canvas);

PIC1.setBounds(120, 120, 200, 200);
PIC1.draw(canvas);

canvas.drawBitmap(PICBitmap, 0, 200, null);

}
}
}

附上小技巧 去掉標題bar的寫法圖片 與飛行船的貼圖測試

1 則留言:

賴泓錡 提到...

想請問定義的圖片
有辦法放到陣列嗎??
例如果ABC三張圖
我想用迴圈達成
同一個地方
播放ABC三張圖的效果
有辦法嗎??