首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >手把手教你写《雷神》游戏(二)

手把手教你写《雷神》游戏(二)

作者头像
提莫队长
发布2019-02-21 11:05:14
3300
发布2019-02-21 11:05:14
举报
文章被收录于专栏:刘晓杰刘晓杰

主界面的编写(Login.java)

这里写图片描述
这里写图片描述

login.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@drawable/menubg"
    android:orientation="vertical" >

    <Button
        android:id="@+id/start"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_above="@+id/option"
        android:layout_marginBottom="30dp"
        android:background="@null"
        android:text="@string/start"
        android:textColor="#FF0000" />

    <Button
        android:id="@+id/option"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"
        android:background="@null"
        android:text="@string/option"
        android:textColor="#FF0000" />

    <Button
        android:id="@+id/rank"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_below="@+id/option"
        android:layout_marginTop="30dp"
        android:background="@null"
        android:text="@string/rank"
        android:textColor="#FF0000" />

    <ProgressBar
        android:id="@+id/progressBar1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:indeterminateDrawable="@drawable/progressbar" />

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_below="@+id/progressBar1"
        android:layout_marginTop="30dp"
        android:gravity="center"
        android:text="@string/hint"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:textColor="#FF0000" />

</RelativeLayout>

注意,ProgressBar,TextView在一开始要设置为隐藏

Login.java

package com.example.gamedemo;

import android.app.Activity;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.content.res.AssetFileDescriptor;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.Window;
import android.view.WindowManager;
import android.widget.Button;
import android.widget.ProgressBar;
import android.widget.TextView;

public class Login extends Activity {
    private SharedPreferences sharedPreferences;
    private Button btnStart, btnOption, rankBtn;
    private TextView tv;
    private ProgressBar pBar;
    private int progress;
    private MediaPlayer mp;

    private Handler handler;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                WindowManager.LayoutParams.FLAG_FULLSCREEN);
        setContentView(R.layout.login);

        try {
            AssetFileDescriptor afd = getAssets().openFd("menubg.mp3");
            mp = new MediaPlayer();
            mp.setLooping(true);
            mp.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(),
                    afd.getLength());
            mp.prepare();
            mp.start();
        } catch (Exception e) {
            e.printStackTrace();
        }

        tv = (TextView) findViewById(R.id.textView1);
        pBar = (ProgressBar) findViewById(R.id.progressBar1);
        pBar.setVisibility(View.INVISIBLE);
        tv.setVisibility(View.INVISIBLE);

        btnStart = (Button) findViewById(R.id.start);
        btnStart.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                pBar.setVisibility(View.VISIBLE);
                tv.setVisibility(View.VISIBLE);
                btnStart.setVisibility(View.INVISIBLE);
                btnOption.setVisibility(View.INVISIBLE);
                rankBtn.setVisibility(View.INVISIBLE);
                progress = 0;
                new Thread(new Runnable() {
                    @Override
                    public void run() {
                        while (true) {
                            Message m = handler.obtainMessage();
                            try {
                                Thread.sleep(50);
                            } catch (InterruptedException e) {
                                e.printStackTrace();
                            }
                            if (progress < 100) {
                                ++progress;
                                m.what = 0x11;
                                handler.sendMessage(m);
                            } else {
                                m.what = 0x12;
                                handler.sendMessage(m);
                                break;
                            }
                        }
                    }
                }).start();
            }
        });

        btnOption = (Button) findViewById(R.id.option);
        btnOption.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                startActivityForResult(new Intent(Login.this,
                        OptionActivity.class), 1);
            }
        });

        rankBtn = (Button) findViewById(R.id.rank);
        rankBtn.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                startActivityForResult(new Intent(Login.this,
                        RankListActivity.class), 2);
            }
        });

        handler = new Handler() {
            @Override
            public void handleMessage(Message msg) {
                if (msg.what == 0x11) {
                    tv.setText("正在加载:" + progress + "%");
                    pBar.setProgress(progress);
                } else if (msg.what == 0x12) {
                    tv.setText("加载完毕!正在进入游戏......");
                    pBar.setVisibility(View.INVISIBLE);
                    startActivityForResult(new Intent(Login.this,
                            MainActivity.class), 2);
                }
            }
        };

        // 生成默认设置
        DefaultOption();
    }

    /**
     * 生成默认设置
     */
    private void DefaultOption() {
        sharedPreferences = getSharedPreferences("option",
                Activity.MODE_PRIVATE);
        Editor editor = sharedPreferences.edit();
        editor.putString("bgMusic", "开");
        editor.putString("gameMusic", "开");
        editor.putString("planeModel", "机型一");
        editor.apply();
    }

    @Override
    protected void onStart() {
        super.onStart();
        sharedPreferences = getSharedPreferences("option",
                Activity.MODE_PRIVATE);
        String bgMusic = sharedPreferences.getString("bgMusic", "开");
        if (bgMusic.equals("关")) {
            isPause = false;
        } else if (bgMusic.equals("开")) {
            isPause = true;
        }
    }

    private boolean isPause = false;

    @Override
    protected void onPause() {
        super.onPause();
        if (mp.isPlaying())
            mp.pause();
        isPause = true;
    }

    @Override
    protected void onResume() {
        super.onResume();
        if (isPause) {
            mp.start();
            isPause = false;
        }
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        if (mp != null) {
            mp.stop();
            mp.reset();
            mp.release();
            mp = null;
        }
    };

    /**
     * 先onActivityResult,后onResume
     */
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (resultCode == RESULT_OK && requestCode == 1) {
            sharedPreferences = getSharedPreferences(
                    "option", Activity.MODE_PRIVATE);
            String bgMusic = sharedPreferences.getString("bgMusic", "开");
            if (bgMusic.equals("关")) {
                isPause = false;
            } else if (bgMusic.equals("开")) {
                isPause = true;
            }
        } else if (resultCode == RESULT_OK && requestCode == 2) {
            btnStart.setVisibility(View.VISIBLE);
            btnOption.setVisibility(View.VISIBLE);
            rankBtn.setVisibility(View.VISIBLE);
            tv.setVisibility(View.INVISIBLE);
            pBar.setVisibility(View.INVISIBLE);
        }
    }
}

构造函数里面默认menubg是正在播放的。 然后设置ProgressBar,TextView为隐藏 然后设置几个button的click事件 组后设置默认的设置。通过sharedPreferences

btnStart响应事件中,新建一个线程来控制progressbar。当progress不满100时,一直加一。当等于100时startActivityForResult。在最后的onActivityResult中requestCode == 2设置组件的是否可视

btnOption进入OptionActivity。requestCode == 1来控制bgmusic的开关(本界面播放的是menubg.mp3,只有在正式的游戏界面才播放gamebg.mp3)

rankBtn进入RankListActivity

当你从别的activity切回Login的话,会调用onStart。所以可以在onStart函数里面重新读取设置来确定是否要播放音乐。

这个界面不算难。就用到了sharedPreferences和onActivityResult和Activity的生命周期。 至于onActivityResult和Activity的生命周期被调用的先后顺序,自己可以Log查看。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016年05月13日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档