从0制作一个多线程游戏实录

目前学习的示例代码是做一个飞机大战。参照其实现方法希望可以实现一个泡泡龙的游戏。当前进度实现了1.飞机的键盘监听(即用键盘控制我放飞机的移动)2.子弹的自动发射3.背景移动4.定时器线程生成敌方飞机,自动落下)待实现功能:1.随机生成宝箱对子弹进行强化2.子弹和飞机的碰撞,3.我机和奖励宝箱的碰撞4.子弹对象会因为宝箱产生攻击力和载入图片效果的变化5.给定我方飞机,地方飞机的生命值会在这里持续更新代码和遇到的问题,以及如何解决的思路。当前实现效果图
摘要由CSDN通过智能技术生成

目前学习的示例代码是做一个飞机大战。参照其实现方法希望可以实现一个泡泡龙的游戏。

当前进度实现了

1.飞机的键盘监听(即用键盘控制我放飞机的移动)

2.子弹的自动发射

3.背景移动

4.定时器线程生成敌方飞机,自动落下)

待实现功能:

1.随机生成宝箱对子弹进行强化

2.子弹和飞机的碰撞,

3.我机和奖励宝箱的碰撞

4.子弹对象会因为宝箱产生攻击力和载入图片效果的变化

5.给定我方飞机,地方飞机的生命值

会在这里持续更新代码和遇到的问题,以及如何解决的思路。

当前实现效果图

 代码如下

/**
 * 飞机类,用于发射子弹的小球

 */
public class Aircraft extends MoveBall {
    //游戏界面的大小

    //初始化飞机的位置
    public Aircraft(){
        setX(370);
        setY(700);
        setSize(60);
    }

}

/**
 * 子弹类
 */
public class Bullet extends MoveBall {
    //重载构造方法
    public Bullet(int x,int y){
        setX(x - 13);
        setY(y);
        setSize(25);
        setVy(-5);
    }
    //子弹的碰撞效果

}
//敌机类
public class Enemy extends MoveBall {
    public Enemy(int x,int y){
        setX(x - 13);
        setY(y);

        setVy(5);
    }
}
import javax.swing.*;
import java.awt.*;

/**
界面

 本次板本希望解决如下问题
 1、闪烁问题
 1)问题原因
 当我们利用普通画笔的时候是实时进行画图,
 当我们利用一个画笔同时在画飞机子弹类和背景类的时候,
 就会出现延迟,即当我在用画笔画背景的时候,
 此时没有画笔在画飞机,这个时候飞机就会消失,
 因为时间间隔很短,所以也就是所谓的闪屏,会出现图片的闪动。
 2)问题解决
 而利用缓存画笔则巧妙的解决了这个问题,
 这个相当于一次性让画笔画完一整张图,
 然后再一次性呈现出来,这样就解决了闪屏。
 2.碰撞问题
 */
public class GameBallUI {
    public void showGameBall(){
        JFrame jf = new JFrame();
        jf.setTitle("飞机大战v2.0");
        jf.setSize(800, 800);
        jf.setLocationRelativeTo(null);
        jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        //不能直接调用jf.setBackground()因为JFrame中用许多面板,这样才有效
        jf.getContentPane().setBackground(Color.white);
        jf.setLayout(new FlowLayout());
//        JButton add = new JButton("add");
//        jf.add(add);
//        JButton start = new JButton("start");
//        jf.add(start);

        jf.setVisible(true);

        //给窗体添加键盘监听器方法
        GameListener gl = new GameListener(jf);
        jf.addKeyListener(gl);//给窗体添加键盘监听器方法

        jf.requestFocus();//让窗体获取焦点,没有焦点java无法获取键盘

    }

    public static
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值