Android遊戲之入口『屏幕』

Android遊戲之入口『屏幕』

遊戲主選單 『屏幕』通常有 『圖標』『選單 』.所要做是『觸摸』選單 時切換『屏幕』.計算出選單 項『矩形區域』與觸碰點重疊時切換『屏幕』在這裡設定四個選單 項.你需要繪畫『文本紋理』寬高相等並是2倍數.背景色設為透明色.並且保存為『.PNG』. 『文本紋理』好在於研發時用英文文本之後再漢化.

你需定義『2D相機』屏幕原點在左下角、VECTOR2D『點』把觸碰座標轉換屏幕座標、渲染『圖標』區域.定義四個按鈕『新遊戲』『繼續遊戲』『高分榜』『遊戲設定』每當更新屏幕update()對四個選單 區域進行overlap()『矩形碰撞測試』.而渲染『屏幕』時則先渲染『背景』後渲染『選單』

選單項 簡介
NEW 啟動新遊戲
PLAY 繼續遊戲按扭
Highscores 高分排名榜
Settings 遊戲設定

public class ScreenMain  extends SCREEN{

private CAMERA2D camera;

private VECTOR2D  touchPoint;

private    RECT2D Bounds_Logo;

private    RECT2D Bounds_New;

private    RECT2D Bounds_Play;

private   RECT2D Bounds_Highscores;

private   RECT2D Bounds_Settings;

購造入口屏幕

public ScreenMain(){

camera = new CAMERA2D(320, 480);// 相機

Bounds_Logo = new RECT2D(WORLD.PIXEL_WIDTH/2, WORLD.PIXEL_HEIGHT/2 + 160 , 256, 128);

Bounds_New = new RECT2D(WORLD.PIXEL_WIDTH/2, WORLD.PIXEL_HEIGHT/2 + 64,  128, 32);

Bounds_Play = new RECT2D(WORLD.PIXEL_WIDTH/2, WORLD.PIXEL_HEIGHT/2 + 32,  128, 32);

Bounds_Highscores = new RECT2D(WORLD.PIXEL_WIDTH/2, WORLD.PIXEL_HEIGHT/2 , 256, 32);

Bounds_Settings = new RECT2D(WORLD.PIXEL_WIDTH/2, WORLD.PIXEL_HEIGHT/2 – 32,  256, 32);

touchPoint        = new VECTOR2D();// 觸碰點

}

更新屏幕都觸碰座標

@Override

public void update(float deltaTime){

for(int i = 0; i < TOUCH.Point_Count; i++){

int action = TOUCH.Point_Action[i];

if(action != TOUCH.ACTION_UP)

continue;

float x = TOUCH.Point_X[i];

float y = TOUCH.Point_Y[i];

touchPoint.set(x, y);

camera.TouchToWorld(touchPoint);//觸摸坐標轉世界坐標

if(Bounds_New.overlap(touchPoint)){// 新遊戲按扭

TOUCH.clear();// 清空

SOUND.Play(ASSETS.sound_click);// 點擊

GAME.setScreen(GAME.getGameScreen());// 遊戲按扭

return;

}

else

if(Bounds_Play.overlap(touchPoint)){// 遊戲按扭

SOUND.Play(ASSETS.sound_click);// 點擊

GAME.setScreen(GAME.getGameScreen());// 遊戲按扭

TOUCH.clear();// 清空

break;

}

else

if(Bounds_Highscores.overlap(touchPoint) ){// 高分按扭

SOUND.Play(ASSETS.sound_click);// 點擊

GAME.setCurrentScreen(GAME.getScoreScreen());

TOUCH.clear();// 清空

break;

}

else

if(Bounds_Settings.overlap(touchPoint)){// 設定按鈕

SOUND.Play(ASSETS.sound_click);// 點擊

GAME.setScreen(GAME.getSettingsScreen());

TOUCH.clear();// 清空

break;

}

}

TOUCH.clear();// 清空

}

渲染屏幕

@Override

public void present(float deltaTime){

GL10            gl   = GRAPHICS.gl;

GLSurfaceView view   = GRAPHICS.gl_View;

gl.glClear(GL10.GL_COLOR_BUFFER_BIT);

camera.SetViewportAndMatrices();

gl.glEnable(GL10.GL_TEXTURE_2D);

BATCHER.Begin(ASSETS.texture_background);

BATCHER.Draw(WORLD.PIXEL_WIDTH/2,WORLD.PIXEL_HEIGHT/2, WORLD.PIXEL_WIDTH, WORLD.PIXEL_HEIGHT, ASSETS.region_background);// 渲染背景

BATCHER.End();

// 設為透明

gl.glEnable(GL10.GL_BLEND);

gl.glBlendFunc(GL10.GL_SRC_ALPHA, GL10.GL_ONE_MINUS_SRC_ALPHA);

BATCHER.Begin(ASSETS.texture_text);

BATCHER.Draw(Bounds_Logo,  ASSETS.region_logo);// 圖標按扭

BATCHER.Draw(Bounds_New,  ASSETS.region_new);// 圖標按扭

BATCHER.Draw(Bounds_Play,  ASSETS.region_play);// 主選單

BATCHER.Draw(Bounds_Highscores,ASSETS.region_highscores);// 高分按扭

BATCHER.Draw(Bounds_Settings, ASSETS.region_settings);// 設定按扭

BATCHER.End();

gl.glDisable(GL10.GL_TEXTURE_2D);// 禁用

}

暫停保存設置

@Override

public void pause(){

}

恢復

@Override

public void resume(){

}

清除/銷毀

@Override

public void dispose(){

}

返回鍵

@Override

public boolean back(){

SOUND.Shutdown();

MUSIC.Shutdown();

return  true;

}

}

 

 

評論