`

JavaFX打砖块游戏开发 第二课

 
阅读更多

上一课中,我们制作了一个挡板,并跟随鼠标左右移动。

这一课我们中,将增加一个小球,在空间中弹来弹去。为了方便,我们只使用简单的碰撞,当然,在后面也会进行改进。


首先新建一个Ball类,继承上一课中的BaseObject。

import javafx.scene.effect.Lighting;
import javafx.scene.paint.Color;
import javafx.scene.shape.Circle;

/**
 * @author wing
 * @date 2012/7/26
 */
public class Ball extends BaseObject{
    private Circle circle;
    private int speedX = 2, speedY = -2;
    public Ball(int centerX,int centerY, int radius) {
        circle = new Circle(centerX, centerY, radius, Color.LIGHTBLUE);
        circle.translateXProperty().bindBidirectional(xProperty());
        circle.translateYProperty().bindBidirectional(yProperty());
        circle.setEffect(new Lighting());
        setWidth(2 * radius);
        setHeight(2 * radius);
        getChildren().add(circle);
        

    }
    
	public void setSpeedX(int speedX) {
		this.speedX = speedX;
	}

	public int getSpeedX() {
		return speedX;
	}
	
	public void setSpeedY(int speedY) {
		this.speedY = speedY;
	}

	public int getSpeedY() {
		return speedY;
	}	
	
}

我们在Ball.java中,新建了一个Circle,然后进行属性绑定。增加了一个Lighting的Effect,让小球看起来稍微真实点。最后通过getChildren进行添加。


下面,我们将它添加进上一课的GameScene.java中。

import org.wing.game.object.Ball;
import org.wing.game.object.MainBrick;

import javafx.animation.KeyFrame;
import javafx.animation.Timeline;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.Parent;
import javafx.scene.input.MouseEvent;
import javafx.scene.paint.Color;
import javafx.scene.shape.Rectangle;
import javafx.util.Duration;

public class GameScene extends Parent {
    private int width, height;
    private Rectangle background;
    private MainBrick mainBrick = new MainBrick();
    private Ball ball = new Ball(15, 15, 15);
    
    private Timeline timeline;
    private KeyFrame keyFrame;
	public GameScene(int width, int height){
    	this.width = width;
    	this.height = height;
        
    	initGameObjects();
    	initTimeLine();

    }
	
	private void initGameObjects(){
        background = new Rectangle(0, 0, this.width, this.height);
        background.setOnMouseMoved(new EventHandler<MouseEvent>() {
            @Override
            public void handle(MouseEvent event) {
                mainBrick.onMouseMove(event);
            }
        });
        background.setFill(Color.BLACK);
		
        mainBrick.setX(0);
        mainBrick.setY(height - mainBrick.getHeight());
        ball.setX((mainBrick.getWidth() - ball.getWidth())/2);
        ball.setY(height - mainBrick.getHeight() - ball.getHeight());
        
        getChildren().add(background);
        getChildren().add(mainBrick);    
        getChildren().add(ball);
	}
	
	private void initTimeLine(){
		timeline = new Timeline();
		timeline.setCycleCount(Timeline.INDEFINITE);
        keyFrame = new KeyFrame(Duration.millis(5), new EventHandler<ActionEvent>(){
            @Override
            public void handle(ActionEvent arg0) {
                ball.moveX(ball.getSpeedX());
                ball.moveY(ball.getSpeedY());
                
                if(ball.getX() <= 0 || ball.getX() >= BrickBlock.WIDTH - ball.getWidth()){
                	ball.setSpeedX(-ball.getSpeedX());
                }
  
                if(ball.getY() <= 0 || ball.getY() >= BrickBlock.HEIGHT - ball.getHeight()){
                	ball.setSpeedY(-ball.getSpeedY());
                }   
                
                if(ball.isCollisionWith(mainBrick)) {
                	ball.setSpeedY(-ball.getSpeedY());
                }
            }  
        });
        timeline.getKeyFrames().add(keyFrame);
        timeline.play();
	}
}

当然,不只是添加。

我们在initGameObjects中,将小球默认位置设置在挡板的上面。

然后就要开始来创建我们的动画了。


JavaFX中的动画就是通过animation来控制的。而animation又有两个子类,其中一个是Transition,很明显就是一些属性改变的动画,JavaFX继承Transition的动画也有很多,详情可以看Doc文档。另外一个就是Timeline, 也就是俗称的时间轴,可以向时间轴Timeline中添加帧KeyFrame,每个KeyFrame主要包含帧运行的时间间隔和帧执行的回调事件EventHandler。

上面的代码中,我们就创建了一个时间轴Timeline,然后添加了一个KeyFrame。 每一帧执行的效果,就是小球的运动,当小球碰到程序的边距和碰到挡板时,会进行反弹。

同时设定TImeline中的帧的执行次数为无限循环。


下面看看程序运行情况:


如何所示,小球将会在空间中弹来弹去,移动鼠标可以移动挡板进行改变小球的运行轨迹。 不过由于此处使用的碰撞没做处理,会有一点其他的小毛病。


这一课就到此结束了,依然用到了上一课中的动态绑定,然后就是Timeline的使用。当然,也可以进行添加Transition来增加其他的动画,这将会在下一课中使用。


转载请注明出处:http://blog.csdn.net/ml3947


---------------------------------------------------------------------------------------------------------------------------------------------------------

本来上周末就准备更新博客的,但周日突然家里出了点事,请了三天假回家了,今天才回到武汉,更新博客。不过对于我而言,现阶段写博客,也只是纯粹积累和分享,与大家共同进步。


分享到:
评论

相关推荐

    基于JavaFX的打砖块游戏设计源码

    该项目是一款采用JavaFX技术实现的打砖块游戏,源码包含45个文件,其中33个为Java源代码文件,5个为PNG图片资源文件,并附带必要的Git忽略和项目配置文件。

    打砖块游戏源码

    【打砖块游戏源码】是一款基于Java编程语言开发的经典街机游戏,它包含了丰富的游戏功能,如关卡设计、视觉图像以及各种特殊效果。在这款游戏中,玩家通过控制一个可移动的挡板来反弹小球,击碎屏幕上方排列的砖块。...

    Java打砖块小游戏

    在本项目中,"Java打砖块小游戏"是一款利用Java编程语言开发的简单娱乐软件,旨在提供一个轻量级的休闲体验。打砖块游戏是一种经典的街机游戏,玩家通过控制一个可移动的挡板来反弹小球,目标是打破屏幕上方的砖块。...

    java游戏打砖块源码

    通过研究这个打砖块游戏的源码,开发者不仅可以学习到Java编程的基本技巧,还能深入了解游戏开发的原理和实践,包括图形渲染、事件处理、碰撞检测和游戏循环等核心概念。对于初学者来说,这是一个很好的学习项目,...

    基于Java打砖块游戏的设计与实现.pdf

    标题中提到的“基于Java打砖块游戏的设计与实现”指出了本文是探讨如何利用Java编程语言开发一个打砖块游戏,强调了游戏开发的具体实现细节。Java是一种广泛使用的编程语言,适合于各种应用程序的开发,包括游戏。打...

    java游戏打砖块

    首先,"打砖块"游戏的基础架构基于Java Swing或JavaFX库来构建用户界面,这两个库为开发桌面应用提供了丰富的组件和功能。Swing是Java的标准GUI工具包,而JavaFX则提供更现代、更高级的图形效果。开发者可以根据自己...

    基于JAVA的打砖块游戏

    【基于JAVA的打砖块游戏】是一款非常适合初学者学习编程的项目,它涵盖了Java语言的基础知识和游戏开发的一些核心概念。下面将详细讲解这个项目中涉及的重要知识点。 首先,Java是一种广泛使用的面向对象编程语言,...

    打砖块游戏

    2. **图形库与框架**:打砖块游戏通常涉及到图形界面,因此源代码可能会引用特定的图形库,如pygame(Python)、SDL(C++)或JavaFX(Java)。这些库提供了绘制图形、处理用户输入和动画等功能。 3. **游戏循环**:...

    打砖块游戏(Java)

    【打砖块游戏(Java)】是一款基于Java编程语言开发的简单休闲游戏,它适合初学者作为学习Java的实践项目。在游戏中,玩家通过控制一块可移动的挡板来反弹小球,使小球击碎屏幕上方排列的砖块。当所有砖块被消除后,...

    打砖块小游戏

    【打砖块小游戏】是一个基于JAVA编程语言开发的微型游戏,它模仿了微信上流行的“疯狂打砖块”玩法。这款游戏虽然在代码完善性上还有待提升,但已经实现了基本的游戏功能,包括但不限于游戏界面、玩家操作、砖块碰撞...

    手机游戏源码 打砖块

    《手机游戏源码:Java实现的打砖块游戏解析》 打砖块是一款经典且深受玩家喜爱的小游戏,它的设计简单却富有挑战性。在这个Java实现的版本中,我们可以通过研究源码深入理解游戏的逻辑和编程技巧。下面将详细探讨这...

    打砖块小游戏带音效

    《打砖块小游戏带音效》是一款基于Java编程语言开发的趣味休闲游戏,它结合了经典的游戏机制与音频效果,为玩家提供了丰富的娱乐体验。在本文中,我们将深入探讨这款小游戏的设计原理、Java编程基础、音效处理以及...

    打砖块JAVA游戏代码

    【打砖块JAVA游戏代码】是一款基于Java编程语言开发的经典休闲游戏,它的核心玩法是通过一个可移动的挡板来反弹小球,击碎屏幕上排列的砖块。在这个项目中,我们将深入探讨Java编程在游戏开发中的应用以及游戏设计的...

    JavaFX战旗类游戏开发示例

    在这个战旗类游戏开发示例中,我们将会深入探讨如何利用JavaFX来设计和实现一款类似棋盘游戏的战旗游戏。 首先,我们需要了解JavaFX的基本结构。一个JavaFX应用通常由多个场景(Scene)和视图(Node)组成。场景是...

    Java打砖块游戏,碰撞检测

    在Java编程领域,开发一款打砖块游戏是一个经典的练习项目,它涉及到许多基础和进阶的编程概念。在这个场景中,我们关注的核心是"碰撞检测",这是游戏开发中的一个重要环节,尤其是对于像打砖块这样需要实时反应的...

    基于java的打砖块游戏.doc

    在第二章中,作者详细介绍了JAVA语言的特点,如面向对象、跨平台等,并讨论了基于JAVA进行游戏开发的相关技术,这可能包括图形用户界面(GUI)的构建、事件处理、动画制作等。JAVA的这些特性使得它可以很好地适应...

    Java打砖块儿游戏代码

    2. **图形用户界面(GUI)编程**:游戏的显示部分使用了Java的Swing库或JavaFX库来创建图形界面,这涉及到了组件的布局管理、事件监听和处理,如鼠标点击控制挡板移动。 3. **图像处理**:游戏中的图片加载和显示是...

    基于Java打砖块小游戏

    【基于Java打砖块小游戏】是一款适合初学者的编程实践项目,它利用Java语言实现了一个基本的游戏框架,展示了Java在游戏开发中的应用。这个小游戏的界面简洁,旨在帮助初学者理解面向对象编程、事件处理、图形用户...

    JAVA课程设计-打砖块游戏.doc

    Java课程设计中的打砖块游戏是一款利用Java编程语言开发的休闲娱乐游戏,旨在提供一个简单易上手且具有趣味性的用户体验。游戏的核心是基于Java的图形用户界面(GUI)技术,这使得游戏能够具备丰富的视觉效果和交互...

Global site tag (gtag.js) - Google Analytics