太空大战-GUI实现(1)
1.复习GUI后,第一天实现的效果

2. 项目实现思路
基本的窗口界面实现就不讲了,源码都看得懂的,这里只说其中比较重要的几个功能的实现。
面板的绘制(所有图形的绘制)
首先,需要在GamePanel中重写PaintComponent方法,该方法有一个画笔参数,之后所有图形都是在这个方法中进行绘制的;
// 绘制面板,游戏中所有东西都用这支画笔
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);//清屏
//积分板
g.setColor(Color.orange);
g.setFont(new Font("黑体", Font.PLAIN, 25));
g.drawString("得分:" + score, 75, 55);
g.drawString("生命:" + blood, 300, 55);
g.drawString("时间:" + time, 650, 55);
GameData.player.paintIcon(this, g, playerX, playerY);
}
战机的左右移动
1.首先,分析功能需求:战机每隔1秒移动一段距离,当碰到窗口边缘时反向移动。
2.为了实现每隔1秒执行方法,我引入了计时器来绑定事件刷新(即:每隔150毫秒执行一次监听事件)
//定时器,每隔一秒执行一次actionPerformed()事件监听,this实现了监听方法
Timer timer = new Timer(150, this);//100毫秒=1秒
3.在实现的监听方法中,编写左右移动的逻辑
// 事件监听
// 每隔一秒刷新一次
@Override
public void actionPerformed(ActionEvent e) {
if ("R".equals(fx)){
playerX += 15;
}else if ("L".equals(fx)){
playerX -= 15;
}
// 边界判断
if (playerX>=875){
fx="L";
}else if (playerX<=25){
fx="R";
}
repaint();//重绘
//开启定时器
timer.start();
}
4.注意点:
4.1在每次执行方法完后记得重绘并开启计时器
repaint();//重绘
//开启定时器
timer.start();
*4.2 初次创建时也要开启计时器
public GamePanel() {
this.setBackground(new Color(94, 63, 107));
//开启定时器,让飞船一秒刷新一次
timer.start();
}
3.总结
好了,今天就做了这么多,还有很多重要功能没有实现,比如,计分板数据更新、射击敌机等。明天先把socket聊天室的界面实现,结合昨天实现的多线程多客户端功能,实现完整聊天室基本功能应该没问题。有空的话继续实现该项目后续功能。加油!!!
太空大战-GUI实现(1)的更多相关文章
- 用Html5结合Qt制作一款本地化EXE游戏-太空大战(Space War)
本次来说一说如何利用lufylegend.js引擎制作一款html5游戏后将其通过Qt转换成EXE程序.步骤其实非常简单,接下来就一步步地做一下解释和说明. 首先我们来开发一个有点类似于太空大战的游戏 ...
- Python+Pygame开发太空大战/飞机大战完整游戏项目(附源代码)
项目名称:太空大战 开发环境:Python3.6.4 第三方库:Pygame1.9.6 代码编辑器:Sublime Text 先来看一下游戏画面吧! 游戏画面动态且丰富哦! 需求分析 利用Pyt ...
- threejs和3d各种效果的学习
写给即将开始threejs学习的自己,各种尝试,各种记忆.不要怕,灰色的年华终会过去. 一个技术学习的快慢,以及你的深刻程度,还有你的以后遇到这个东西的时候的反应速度,很大程度上,取决于你的博客的深刻 ...
- 剖析虚幻渲染体系(14)- 延展篇:现代渲染引擎演变史Part 1(萌芽期)
目录 14.1 本篇概述 14.1.1 游戏引擎简介 14.1.2 游戏引擎模块 14.1.3 游戏引擎列表 14.1.3.1 Unreal Engine 14.1.3.2 Unity 14.1.3. ...
- 【unity3d游戏开发脚本笔记之一:坐标系选择对物体运动的影响】
时间:2016年9月24日17:38:21 作者:yexiaopeng 博客园 在unity3d的世界中,其坐标系可分为四种,世界坐标系-WorldSpace 本地坐标系-LocalS ...
- Right Column - 右侧栏目
function share(sType){ var sName = "Yorhom\'s Game Box"; var title='Yorhom\'s Game Box', _ ...
- ActionScript通用开发框架
ActionScript 3(简称as)自2006年诞生以来,出现了一大批很优秀框架.就我的知识领域,运用包括pureMVC.pushButton Engine(组件框架).Robotlegs.Ash ...
- 传智播客C/C++学员荣膺微软&Cocos 2d-x黑客松最佳创新奖
6月30日,历时32小时的微软开放技术Cocos 2d-x 编程黑客松在北京望京微软大厦成功落下帷幕,这是微软开放技术首次联合Cocos 2d-x 在中国举办黑客松.此次活动共有包括传智播客C/ ...
- 关于AR,你想要的全在这儿了
定义 增强现实(Augmented Reality,简称AR),是一种实时地计算摄影机影像的位置及角度并加上相应图像的技术,这种技术的目标是在屏幕上把虚拟世界套在现实世界并进行互动.这种技术估计由19 ...
随机推荐
- python项目案例
python项目案例1:----此学习案例用python3编写,摘自明日科技,感谢! 学生管理系统: 功能描述:具有增删改查,排序,保存并显示学生的全部信息. 1.主界面---函数menu(),显示功 ...
- odoo里面context用法
原文转自:https://www.cnblogs.com/zhaoweihang/p/9698852.html <field name="partner_id" string ...
- odoo中接口开发
文章参考:https://blog.csdn.net/qq_33472765/article/details/81913627案例0000001接口调用请求说明:https请求方式:GET(请使用ht ...
- Java 给Word添加印章
一.概述 本文以Java程序代码展示如何给Word文档添加印章,这里添加的印章为.png格式的图片,添加印章即在Word中的指定位置添加印章图片. 基本思路:加载word文档,获取段落,在段落中插入图 ...
- HTTP协议GET方法传参最大长度理解误区
结论 HTTP 协议未规定GET和POST的长度 GET的最大长度是因为浏览器和WEB服务器显示了URI的长度 不同浏览器和WEB服务器,限制的最大长度不同 若要支持IE,则最大长度为2083 byt ...
- shell常识
1 #!/bin/bash 2 : << ! 3 #使用变量 4 your_name="qinjx" 5 echo $your_name 6 echo ${your_n ...
- Vulhub-Phpmyadmin 4.8.1远程文件包含漏洞
前言:Phpmyadmin是一个用PHP编写的免费软件工具,旨在处理Web上的MySQL管理. 该漏洞在index.php中,导致文件包含漏洞 漏洞环境框架搭建: cd vulhub-master/p ...
- 随着日益增多的新技术,Android开发接下来的路该怎么走?
很多小伙伴们经常问我android移动开发者的走向,一部分人都想多快好省,间歇性踌躇满志.持续性混吃等死 ,只想用CV的开发模式们快速完成工作,然后回家王者农药.其实这种现象很普遍,我想告诉你的是 , ...
- Android工程师所必经的三个阶段,你到哪个阶段了?
前言 最近一直在思考,作为一名软件开发工程师,到底应该如何实现自我成长,是否有捷径而言?其实断断续续有过很多思考,也有和各种年龄段的同学们做过不少交流,结合自身的经历,有一些感悟和思考.本文可能可以适 ...
- Flink EOS如何防止外部系统乱入--两阶段提交源码
一.前言 根据维基百科的定义,两阶段提交(Two-phase Commit,简称2PC)是巨人们用来解决分布式系统架构下的所有节点在进行事务提交时保持一致性问题而设计的一种算法,也可称之为协议. 在F ...