java 键盘 映射 控制游戏_如何运用JAVA程序设计进行键盘控制游戏
如何运用java程序设计进行键盘控制游戏
下面我们学习使用键盘来控制图形的运动。
在上一节的教程中,如何运用java程序设计认识了碰撞检测,那么现在我们在深入去制作,那么就是对于键盘控制游戏(相当于按键一样)。
在游戏中常常需要用键盘进行对游戏的控制,例如超级玛丽,贪吃蛇等等,这些游戏都需要我们也能够键盘去控制,那么我们现在学习一下,如何用JAVA程序设计键盘控制游戏。
1.新建一个java项目Ball2:
import java.awt.*;
import java.awt.image.*;
import java.util.*;
public class MyPanel extends Panel implements Runnable {
private int x;
private int y;
private int dx,dy;
private int diameter;
private int width;
private int height;
private Image im;
private Graphics dbg;
public MyPanel() {
x=50;
y=50;
dx=10;dy=10;
diameter=50;
width=300;
height=200;
setPreferredSize(new Dimension(width, height));//设置组件的大小
}
public void gamePaint() { //前屏绘制
Graphics g;
try {
g = this.getGraphics(); //获取当前屏幕的Graphics对象
if (g != null && im != null) {
g.drawImage(im, 0, 0, null);//将图像缓冲区中的内容复制到前屏缓冲区,显示出来
}
g.dispose();//释放当前屏幕的Graphics对象
} catch (Exception e) {
}
}
public void gameRender() { //离屏绘制
if (im == null) {
im = createImage(width, height);
if (im == null) {
System.out.println("im is null");
} else {
dbg = im.getGraphics();
}
}
dbg.setColor(Color.WHITE);
dbg.fillRect(0, 0, width, height);//用底色矩形填充画版,擦去图案
dbg.setColor(Color.blue);
dbg.fillOval(x, y, diameter, diameter); //画出椭圆
}
public void gameUpdate() { //更新游戏逻辑
x=x+dx;
y=y+dy;
if((x<0)||(x>width-diameter)){
dx=-dx;
}
if((y<0)||(y>height-diameter)){
dy=-dy;
}
}
public void run() {
while(true){
gameUpdate();
gameRender();
gamePaint();
//以下我们用一个延时函数代替空循环来延时,sleep(10)中的数字代表延时毫秒,数字越小越快
try {
Thread.sleep(200);} //括号里面的10代表10毫秒,也就是0.001秒,可以该成你需要的时间
catch (InterruptedException e) {
e.printStackTrace();}
}
}
}
2.然后新建一个MyPanel类,代码如下:
import java.awt.*;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.image.*;
import java.util.*;
public class MyPanelextends Panel implements Runnable, KeyListener {
private int x;
private int y;
private int dx,dy,direction;
private int diameter;
private int width;
private int height;
private Image im;
private Graphics dbg;
privateThreadgamethread;
public MyPanel() {
x=50;
y=50;
dx=10;
dy=10;
diameter=50;
width=500;
height=500;
setPreferredSize(new Dimension(width, height));//设置组件的大小
this.setFocusable(true);//设置焦点
this.requestFocus();//获取焦点
this.addKeyListener(this);//添加键盘监听事件
}
public void gamePaint() { //前屏绘制
Graphics g;
try {
g = this.getGraphics(); //获取当前屏幕的Graphics对象
if (g != null && im != null) {
g.drawImage(im, 0, 0, null);//将图像缓冲区中的内容复制到前屏缓冲区,显示出来
}
g.dispose();//释放当前屏幕的Graphics对象
} catch (Exception e) {
}
}
public void gameRender() { //离屏绘制
if (im == null) {
im = createImage(width, height);
if (im == null) {
System.out.println("im is null");
} else {
dbg = im.getGraphics();
}
}
dbg.setColor(Color.WHITE);
dbg.fillRect(0, 0, width, height);//用底色矩形填充画版,擦去图案
dbg.setColor(Color.blue);
dbg.fillOval(x, y, diameter, diameter); //画出椭圆
}
public void gameUpdate() { //更新游戏逻辑
switch (direction){
case 1:
y=y+dy;//向下移
direction=0; //移动情况清零
break;
case 2:
y=y-dy; //向上移
direction=0;//移动情况清零
break;
case 3:
x=x+dx;//向右移
direction=0;//移动情况清零
break;
case 4:
x=x-dx;//向左移
direction=0;//移动情况清零
break;
}
}
public void keyPressed(KeyEvent e){
int keycode = e.getKeyCode();
if (keycode ==KeyEvent.VK_DOWN)
direction=1; //用1代表下
if (keycode ==KeyEvent.VK_UP)
direction=2;//用2代表上
if (keycode == KeyEvent.VK_RIGHT)
direction=3;//用3代表右
if (keycode == KeyEvent.VK_LEFT)
direction=4;//用4代表左
}
public void keyTyped(KeyEvent e){
}
public void keyReleased(KeyEvent e){
}
public void run() {
while(true){
gameUpdate();
gameRender();
gamePaint();
//以下我们用一个延时函数代替空循环来延时,sleep(10)中的数字代表延时毫秒,数字越小越快
try {
Thread.sleep(10);} //括号里面的10代表10毫秒,也就是0.001秒,可以该成你需要的时间
catch (InterruptedException e) {
e.printStackTrace();}
}
}
publicvoidgameStart(){
gamethread= new Thread(this);
gamethread.start();
}
}
上面代码可以当成新的游戏框架,它加上了键盘的监控事件。
五.练习:
根据上面的题目,做出一个动画,显示文件夹中的pic1.gif图像,用鼠标的上下左右能控制它的移动,而且移动到窗口边缘,就不能再继续移动。
提示:画图代码:
Imageimage=getToolkit().getImage("pic1.gif");//先载入图片
dbg.drawImage(image,x,y,100,130,this);//在x,y坐标处显示宽高为130的图像。
小编结语:其实对于这一节教程,运用JAVA程序游戏设计进行键盘控制游戏,设计起来不难,我们可以用一个游戏框架就可以了,那么难的是,你如何去修改你想要的类型。
java 键盘 映射 控制游戏_如何运用JAVA程序设计进行键盘控制游戏相关推荐
- 纯java语言做rpg游戏_【纯JAVA语言做个RPG游戏】2.游戏界面及角色移动的基本实现...
继上次做的地图编辑器,我大致的做了一个4000X4000的游戏地图数组,不过只画了一部分,以后要加什么新东西继续编辑这个地图就行了,保存在了一个文件中. 现在便可以继续下一步,做出游戏的大致界面了. ...
- java小恐龙游戏_用Python实现谷歌的小恐龙游戏
前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. 谷歌流量器中有个很有名的彩蛋:当你网络出现问题时,就会出现一个"小恐龙游戏&quo ...
- 根据斗破苍穹改编的Java游戏_不仅《斗破苍穹》改编动漫游戏,这个作者才是游戏IP大师!...
很多RPG游戏都是根据知名小说改编,吃桃鸽今天就挑出几部自己玩过游戏,还看过原文的小说来小评一下. <诛仙> <诛仙>这本小说刚出来的时候,吃桃鸽当时还在用诺基亚,上课的时候偷 ...
- python pygame模块怎么写游戏_使用 Python 和 Pygame 模块构建一个游戏框架
这系列的第一篇通过创建一个简单的骰子游戏来探究 Python.现在是来从零制作你自己的游戏的时间. 在我的这系列的第一篇文章 中, 我已经讲解如何使用 Python 创建一个简单的.基于文本的骰子游戏 ...
- java 面试题合集_撩课-Java面试题合辑1-50题
1.简述JDK.JRE.JVM? 一.JDK JDK(Java Development Kit) 是整个JAVA的核心, 包括了Java运行环境(Java Runtime Envirnment), 一 ...
- java中io是什么_深入理解Java中的IO
深入理解Java中的IO 转载自:http://blog.csdn.net/qq_25184739/article/details/51205186 本文的目录视图如下: Java IO概要 a.Ja ...
- 深入java虚拟机 第四版_深入理解Java虚拟机-常用vm参数分析
Java虚拟机深入理解系列全部文章更新中... https://blog.ouyangsihai.cn/shen-ru-li-jie-java-xu-ni-ji-java-nei-cun-qu-yu- ...
- java视频为什么这么多_为什么看java教学视频教的都是javase,两者难道语言相同吗?...
Java 分类 Java SE(Java Platform Standard Edition) :Java平台标准版.主要用于桌面应用程序的开发,是Java技术的核心,提供基础 Java开发工具.执行 ...
- java的应用程序开发_开发一个Java应用程序(1)
开发一个Java应用程序(1) App Engine上的Java Web应用程序通过Java Servlet标准接口与应用程序服务器交互.一个应用程序由一个或多个类组成,这些类都扩展自一个servle ...
- java 线程中创建线程_如何在Java 8中创建线程安全的ConcurrentHashSet?
java 线程中创建线程 在JDK 8之前,还没有办法在Java中创建大型的线程安全的ConcurrentHashSet. java.util.concurrent包甚至没有一个名为Concurren ...
最新文章
- Vue.js slots: 为什么你需要它们?
- 71页《乌镇智库:全球人工智能发展报告(2018)》PDF下载
- Gitlab完整搭建手册+排错
- [转]关于int整形变量占有字节问题
- blockingqueue java_记录 Java 的 BlockingQueue 中的一些坑
- python实现文件上传功能_python实现上传下载文件功能
- 【ArcGIS风暴】基于ArcGIS空间分析功能研究渭河流域镇驻地空间分布格局
- java isempty_Optional.isEmpty()即将加入Java吗?
- 大数据之Hive教程
- 2013年度开源社区年会,3W咖啡免费让你更多接触开源
- Skywalking-02:如何写一个Skywalking trace插件
- docker入门与实战pdf_Docker-Kubernetes-k8s微服务实战视频教程+Docker技术入门精讲课程资料分享...
- iOS设计模式之备忘录模式
- soapui使用教程2-属性与脚本
- 国二考试报Wps还是c语言,2021 年全国计算机二级增考 WPS Office
- 第三章 平稳时间序列模型
- VOC2007数据集的下载和解压
- 中国土地市场销售规模状况与投资战略研究报告2022版
- 空间域和频域结合的图像增强技术及实现
- 捋一捋Python中的List(下)
热门文章
- 基于随机森林算法的葡萄酒种类识别
- 37.softmax多元逻辑回归
- 人员-组织 结构 数据库关系设计
- 计算机报名503,503 service temporarily unavailable是什么意思【解决方法】
- 消息队列返回错误:Resource temporarily unavailable
- 缓解眼睛疲劳:按摩+复调钢琴曲
- 学了这么多年精益思想,居然不知道还有第八种浪费 | IDCF
- 用基带等效的方式仿真8-DPSK载波调制信号在AWGN信道下的误码率和误比特率,并与理论值相比较。
- 查询计算机物理地址指令,怎么查询mac地址命令_如何查mac地址
- laravel admin里百度编辑器自定义路径和文件名