通过前面的总结,动画已经可以很好的运行了,现在要让动画动起来,这里说的动起来就是能让它运动,不是原地的动画,而是坐标发生的变化。也就是可以再屏幕上独立运动的图形。我们用Fly命名它。
Fly有两个特性,就是位置和速度。位置就是它当前在屏幕中的坐标,速度就是它的速率和运动方向。现在定义Fly这个类
/**
*
*/
package com.jsheng.game.util;
import java.awt.Image;
/**
* company: jsheng
* @author wanghn wanghaining9999@sina.com
*/
public class Fly {
private Animation animation; //原来的动画
//位置
private float x;
private float y;
//速度
private float dx;
private float dy;
public Fly(Animation anmi){
this.animation = anmi;
}
//根据速度更新位置
public void update(long passedTime){
x+=dx*passedTime;
y+=dy*passedTime;
animation.update(passedTime);
}
public float getX() {
return x;
}
public void setX(float x) {
this.x = x;
}
public float getY() {
return y;
}
public void setY(float y) {
this.y = y;
}
public float getDx() {
return dx;
}
public void setDx(float dx) {
this.dx = dx;
}
public float getDy() {
return dy;
}
public void setDy(float dy) {
this.dy = dy;
}
public Image getImage(){
return animation.getImage();
}
public int getWidth(){
return animation.getImage().getWidth(null);
}
public int getHeight(){
return animation.getImage().getHeight(null);
}
}
下面让Fly在屏幕中动起来
package com.jsheng.game.test1;
import java.awt.DisplayMode;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import javax.swing.ImageIcon;
import com.jsheng.game.util.Animation;
import com.jsheng.game.util.Fly;
import com.jsheng.game.util.ScreenManager;
public class SpriteTest1 {
public static void main(String args[]) {
SpriteTest1 test = new SpriteTest1();
test.run();
}
//上节说到提供一个可选择的现实数组,让这个类自动选择合适的DisplayMode
private static final DisplayMode POSSIBLE_MODES[] = {
new DisplayMode(800, 600, 32, 0),
new DisplayMode(800, 600, 24, 0),
new DisplayMode(800, 600, 16, 0),
new DisplayMode(640, 480, 32, 0),
new DisplayMode(640, 480, 24, 0),
new DisplayMode(640, 480, 16, 0)
};
private ScreenManager screen;
private Image bgImage;
private Fly fly;
public void loadImages() {
// 读取所有图片
bgImage = loadImage("images/bg.jpg");
Image player1 = loadImage("images/1.jpg");
Image player2 = loadImage("images/2.jpg");
Image player3 = loadImage("images/3.jpg");
// 构造出动画
Animation anim = new Animation();
anim.addFrame(player1, 250);
anim.addFrame(player2, 150);
anim.addFrame(player1, 150);
anim.addFrame(player2, 150);
anim.addFrame(player3, 200);
anim.addFrame(player2, 150);
fly = new Fly(anim);
// 设置起初Fly的速度
fly.setDx(0.2f);
fly.setDy(0.2f); //这里设置了x和y,所以一开始是向右下飞.
}
private Image loadImage(String fileName) {
return new ImageIcon(fileName).getImage();
}
public void run() {
screen = new ScreenManager();
try {
DisplayMode displayMode =
screen.findFirstCompatibleMode(POSSIBLE_MODES);
screen.setFullScreen(displayMode);
loadImages();
animationLoop();
}
finally {
screen.restoreScreen();
}
}
public void animationLoop() {
long startTime = System.currentTimeMillis();
long currTime = startTime;
while (currTime - startTime < 100000) {
long elapsedTime =
System.currentTimeMillis() - currTime;
currTime += elapsedTime;
update(elapsedTime);
Graphics2D g = screen.getGraphics();
draw(g);
g.dispose();
screen.update();
try {
Thread.sleep(20);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
public void update(long elapsedTime) {
// 判断是否飞到了屏幕边缘
if (fly.getX() < 0) {
fly.setDx(Math.abs(fly.getDx()));
}
else if (fly.getX() + fly.getWidth() >=
screen.getWidth())
{
fly.setDx(-Math.abs(fly.getDx()));
}
if (fly.getY() < 0) {
fly.setDy(Math.abs(fly.getDy()));
}
else if (fly.getY() + fly.getHeight() >=
screen.getHeight())
{
fly.setDy(-Math.abs(fly.getDy()));
}
fly.update(elapsedTime);
}
//不停的去画,通过改变 Fly的xy值,也就是Fly的位置,来使Fly动起来
public void draw(Graphics g) {
g.drawImage(bgImage, 0, 0, null);
g.drawImage(fly.getImage(),
Math.round(fly.getX()),
Math.round(fly.getY()),
null);
}
}
分享到:
相关推荐
JAVA游戏编程 JAVA入门 JAVA游戏编程 JAVA入门 JAVA游戏编程 JAVA入门 JAVA游戏编程 JAVA入门 JAVA游戏编程 JAVA入门 JAVA游戏编程 JAVA入门
总的来说,Java游戏编程涵盖了广泛的编程知识,从基础到高级,从理论到实践,都需要深入理解和掌握。通过不断的学习和实践,开发者可以利用Java创造出丰富多样的游戏世界。在"JavaGames"这个压缩包中,可能包含了...
Java游戏编程是软件开发领域中的一个分支,它利用Java编程语言来创建各种类型的游戏,从简单的2D小游戏到复杂的3D大作。本资源“Java游戏编程(游戏开发与编程序列).rar”可能包含一系列教程、源代码示例或者相关...
Java游戏编程原理与实践教程是一本深入探讨如何使用Java语言进行游戏开发的专业书籍。它涵盖了游戏编程的基础概念、核心技术以及实战技巧,旨在帮助读者从零基础到熟练掌握Java游戏开发。书中结合了大量的实例和源...
《Java 2游戏编程》是一本专为游戏开发爱好者和专业人士设计的教程,由美国作者Thomas Petchel撰写,并由晏利斌、孙淑敏、邵荣等人翻译成中文。这本书深入浅出地介绍了如何使用Java 2平台进行游戏开发,涵盖了从基础...
Java游戏编程导学 在Java游戏开发领域,Java以其跨平台、高效稳定的特点,成为许多开发者的选择。本导学将深入探讨如何利用Java语言来创建引人入胜的游戏。Java游戏编程不仅涉及到基本的编程概念,还涵盖了图形渲染...
Java游戏编程原理与实践是计算机科学中的一个重要领域,它结合了Java编程语言的特性与游戏设计的技巧。在这个教程源码包中,包含了多种经典游戏的实现,如推箱子、俄罗斯方块、超级玛丽等,这些都是游戏开发初学者和...
Java游戏编程原理与实践教程是一本深入探讨如何使用Java语言进行游戏开发的专业书籍,由陈锐、夏敏捷、葛丽萍三位专家共同编著。这本书不仅涵盖了基础的编程概念,还详细介绍了游戏开发中的关键技术和实战技巧。通过...
在JAVA游戏编程的世界里,开发者可以利用JAVA的强大功能和丰富的库来创造引人入胜的游戏体验。本课程资料集合了从基础知识到高级技术的全面学习路径,帮助你深入理解JAVA在游戏开发中的应用。 首先,从第二章的...
在深入探讨Java游戏编程的世界之前,我们先要理解Java作为一种编程语言的基础特性。Java是由Sun Microsystems(现为Oracle公司)于1995年推出的,它是一种面向对象、跨平台的语言,具有“一次编写,到处运行”的特性...
想学JAVA游戏编程吗?快来了解下吧!这个资源是Java初学者的极品教程,讲的简单透彻。
Java游戏编程是一个涵盖广泛的主题,它涉及到使用Java编程语言来创建各种类型的游戏,从简单的2D小游戏到复杂的3D大作。在这个领域中,开发者需要掌握基础的编程概念,以及特定于游戏开发的技术。 首先,Java是一种...
java游戏编程光盘源代码!~
Java游戏编程源码教程是一门深入浅出的学习资源,适合对Java编程有兴趣并希望进入游戏开发领域的初学者。本教程通过实例源码讲解,旨在帮助读者掌握Java在游戏开发中的应用,逐步提升编程技巧和游戏设计能力。 首先...
以下将详细介绍与"JAVA游戏编程源代码"相关的技术要点。 1. **Java基础知识**:Java是面向对象的语言,理解类、对象、封装、继承和多态等核心概念至关重要。同时,熟悉Java语法,如控制流(if-else,switch,循环)...
Java游戏编程开发教程是针对那些想要利用Java语言创建游戏的开发者设计的一套全面学习资源。Java作为一种跨平台、面向对象的编程语言,因其强大的性能和灵活性,在游戏开发领域有着广泛的应用。本教程将深入探讨如何...
"Java游戏编程小手册" 本资源是一个Java游戏编程的小手册,涵盖了Java游戏开发的基本概念、技术和框架。下面是从该资源中提炼出的知识点: 一、Java游戏开发概述 Java游戏开发是使用Java语言创建游戏的过程。...
在百科里搜索“Java游戏编程” (http://baike.baidu.com/view/647813.htm),就能发现一部好书——《Java游戏编程》,是深入学习java可望而不可求(难买)的好书
在《Java游戏编程入门》这本书中,作者向我们揭示了使用Java语言开发游戏的基本概念和技术。这是一本适合初学者的教程,旨在帮助那些对编程和游戏开发感兴趣的人快速掌握必要的技能。书中不仅包含了Java语言的基础...
本书的出版标志着Java游戏编程技术的深入探索和应用,是对游戏开发人员和爱好者来说一本非常实用的参考书籍。 从书的内容来看,涵盖了Java游戏编程的众多方面,主要包括以下几点: 1. Java 2D游戏编程基础:书中从...