遊戲主選單 『屏幕』通常有 『圖標』『選單 』.所要做是『觸摸』選單 時切換『屏幕』.計算出選單 項『矩形區域』與觸碰點重疊時切換『屏幕』在這裡設定四個選單 項.你需要繪畫『文本紋理』寬高相等並是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(){
return true;
}
}