读 Beginning Android Games 2nd Edition (十五) 游戏主菜单

来源:互联网 发布:边际效应递减规律知乎 编辑:程序博客网 时间:2024/06/06 07:14

如上图,主菜单的选项有各自的坐标数,点击在固定的范围内才能触发相应事件

package com.badlogic.androidgames.mrnom;import java.util.List;import com.badlogic.androidgames.framework.Game;import com.badlogic.androidgames.framework.Graphics;import com.badlogic.androidgames.framework.Input.TouchEvent;import com.badlogic.androidgames.framework.Screen;public class MainMenuScreen extends Screen {    public MainMenuScreen(Game game) {        super(game);                   }       public void update(float deltaTime) {        Graphics g = game.getGraphics();        List<TouchEvent> touchEvents = game.getInput().getTouchEvents();        game.getInput().getKeyEvents();                       int len = touchEvents.size();        for(int i = 0; i < len; i++) {            TouchEvent event = touchEvents.get(i);            if(event.type == TouchEvent.TOUCH_UP) {                if(inBounds(event, 0, g.getHeight() - 64, 64, 64)) {                    Settings.soundEnabled = !Settings.soundEnabled;                    if(Settings.soundEnabled)                        Assets.click.play(1);                }                if(inBounds(event, 64, 220, 192, 42) ) {                    game.setScreen(new GameScreen(game));                    if(Settings.soundEnabled)                        Assets.click.play(1);                    return;                }                if(inBounds(event, 64, 220 + 42, 192, 42) ) {                    game.setScreen(new HighscoreScreen(game));                    if(Settings.soundEnabled)                        Assets.click.play(1);                    return;                }                if(inBounds(event, 64, 220 + 84, 192, 42) ) {                    game.setScreen(new HelpScreen(game));                    if(Settings.soundEnabled)                        Assets.click.play(1);                    return;                }            }        }    }        private boolean inBounds(TouchEvent event, int x, int y, int width, int height) {        if(event.x > x && event.x < x + width - 1 &&            event.y > y && event.y < y + height - 1)             return true;        else            return false;    }    public void present(float deltaTime) {        Graphics g = game.getGraphics();                g.drawPixmap(Assets.background, 0, 0);        g.drawPixmap(Assets.logo, 32, 20);        g.drawPixmap(Assets.mainMenu, 64, 220);        if(Settings.soundEnabled)            g.drawPixmap(Assets.buttons, 0, 416, 0, 0, 64, 64);        else            g.drawPixmap(Assets.buttons, 0, 416, 64, 0, 64, 64);    }    public void pause() {                Settings.save(game.getFileIO());    }    public void resume() {    }    public void dispose() {    }}
present 方法是在界面中画出背景图,游戏logo,游戏主菜单选项(实际上是一整张图片,不同选项),选择静音的按钮

inBounds方法限定触摸屏幕时,事件触发的区域

                    if(Settings.soundEnabled)                        Assets.click.play(1);
上面的代码就是点击菜单以后,如果没有静音,那么播放点击时的音效

总的来说,还是很好理解的

原创粉丝点击