Android游戏案例开发大全中Sample_5_4不能运行的解决方法

书籍介绍

本节书摘来自异步社区《Android 游戏案例开发大全(第4版)》一书中的第5章,第5.4节的一个Android程序——双人联网操控飞机案例,作者 吴亚峰 , 于复兴 , 苏亚光,更多章节内容可以访问云栖社区“异步社区”公众号查看
在这里插入图片描述

双人联网操控飞机案例

项目介绍

这个项目是在Android平台下基于socket套接字的网络游戏开发,两个玩家分别点击各自手机上的按钮连接同一局域网,当网络连接成功后,两个手机的屏幕上同时呈现两架飞机,每个玩家控制一架飞机。当任一玩家移动遥杆操控自己的飞机时,手机屏幕都会同步更新飞机的位置。

问题1

运行程序后,屏幕上会出现“等待连接。。。”的字样。如图所示
在这里插入图片描述

问题原因

问题的原因就是他所说的,没有连接到服务器,所以解决问题的方法是连接到服务器。

解决办法

1.在自己的电脑上运行服务器端程序。我是在eclipse上运行服务器端程序serverthread。运行结果如下
在这里插入图片描述
服务器正在等待客户端的连接。
2.在AndroidManifest.xml中添加网络权限

<uses-permission android:name="android.permission.INTERNET"></uses-permission>

3.使自己的手机连接与自己的电脑处于同一局域网。方法是电脑开启移动热点,手机连接到电脑的热点。
在这里插入图片描述
4.修改IP,在项目中的networkthread.java中的run()方法里,代码中的IP不是自己电脑的IP,所以无法通过IP连接到服务器。

sc=new Socket("192.168.137.1", 9999);//连接服务器

故需要修改IP,方法如下
(1)打开命令提示符(cmd)
在这里插入图片描述
(2)通过ipconfig命令,获取本地连接2的IPv4地址。注意这里获取的是本地连接2的IPv4地址,不要弄错了。

在这里插入图片描述
(3)用它替换掉书中代码的IP,IP问题就解决了。
5.启动networkthread线程。
书中说王佳点击手机上的菜单键连接同一局域网,然而并没有什么菜单键。通过查资料得知,菜单键只有在早期的安卓手机才有,在Android 4时就没有了。现在已经是Android 10了。所以我在界面上添加按钮,通过单击按钮来启动networkthread线程。

package com.example.client;


import com.example.client.thread.KeyThread;
import com.example.client.thread.NetworkThread;
import com.example.clinet.view.GameView;
import com.example.util.GameData;
import android.os.Bundle;
import android.os.Handler;
import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.view.View;
import android.widget.Button;

public class MainActivity extends Activity implements View.OnClickListener {
    public int KeyDispX=0;//方向x
    public int KeyDispY=0;//方向y
    public Bitmap planer;
    public Bitmap planeg;
    public GameData gd=new GameData();
    public KeyThread kt=new KeyThread(this);
    public 	NetworkThread nt;
    GameView gv;
    Button button1;//按钮的引用
    public Handler handler=null;//声明Handler对象

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        button1 = (Button) findViewById(R.id.button1);//得到布局中的按钮引用 button1.setOnClickListener(this);//添加监听
        button1.setOnClickListener(this);//添加监听
        this.handler=new Handler();//创建属于主线程的handler
        planer=BitmapFactory.decodeResource(getResources(), R.drawable.red);//红飞机
        planeg=BitmapFactory.decodeResource(getResources(), R.drawable.yellow);//黄飞机
        gv=(GameView)this.findViewById(R.id.mf1);
    }

    public void onClick(View v) {//点击按钮后执行的代码
        if(v == button1){
            if(this.nt==null)
            {//若没有启动networkthread线程,则启动networkthread线程
                this.nt=new NetworkThread(MainActivity.this);
                this.nt.start();
            }
        }
    }
}

运行结果

客户端
在这里插入图片描述
服务器端
在这里插入图片描述

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值