import java.applet.Applet;
import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.GraphicsConfiguration;
import java.awt.Panel;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.media.j3d.AmbientLight;
import javax.media.j3d.BoundingSphere;
import javax.media.j3d.BranchGroup;
import javax.media.j3d.Canvas3D;
import javax.media.j3d.DirectionalLight;
import javax.media.j3d.Transform3D;
import javax.media.j3d.TransformGroup;
import javax.swing.Timer;
import javax.vecmath.Color3f;
import javax.vecmath.Point3d;
import javax.vecmath.Vector3d;
import javax.vecmath.Vector3f;
import com.sun.j3d.utils.applet.MainFrame;
import com.sun.j3d.utils.geometry.Sphere;
import com.sun.j3d.utils.universe.SimpleUniverse;
public class BouncingBall extends Applet implements ActionListener, KeyListener {
private Button go = new Button("Go");
private TransformGroup objTrans;
private Transform3D trans = new Transform3D();
private float height = 0.0f;
private float sign = 1.0f; // going up or down
private Timer timer;
private float xloc = 0.0f;
public BranchGroup createSceneGraph() {
// Create the root of the branch graph
BranchGroup objRoot = new BranchGroup();
objTrans = new TransformGroup();
objTrans.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
objRoot.addChild(objTrans);
// Create a simple shape leaf node, add it to the scene graph.
Sphere sphere = new Sphere(0.25f);
objTrans = new TransformGroup();
objTrans.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
Transform3D pos1 = new Transform3D();
pos1.setTranslation(new Vector3f(0.0f, 0.0f, 0.0f));
objTrans.setTransform(pos1);
objTrans.addChild(sphere);
objRoot.addChild(objTrans);
BoundingSphere bounds = new BoundingSphere(new Point3d(0.0, 0.0, 0.0),
100.0);
Color3f light1Color = new Color3f(1.0f, 0.0f, 0.2f);
Vector3f light1Direction = new Vector3f(4.0f, -7.0f, -12.0f);
DirectionalLight light1 = new DirectionalLight(light1Color,
light1Direction);
light1.setInfluencingBounds(bounds);
objRoot.addChild(light1);
// Set up the ambient light
Color3f ambientColor = new Color3f(1.0f, 1.0f, 1.0f);
AmbientLight ambientLightNode = new AmbientLight(ambientColor);
ambientLightNode.setInfluencingBounds(bounds);
objRoot.addChild(ambientLightNode);
return objRoot;
}
public BouncingBall() {
setLayout(new BorderLayout());
GraphicsConfiguration config = SimpleUniverse
.getPreferredConfiguration();
Canvas3D c = new Canvas3D(config);
add("Center", c);
c.addKeyListener(this);
timer = new Timer(100, this);
//timer.start();
Panel p = new Panel();
p.add(go);
add("North", p);
go.addActionListener(this);
go.addKeyListener(this);
// Create a simple scene and attach it to the virtual universe
BranchGroup scene = createSceneGraph();
SimpleUniverse u = new SimpleUniverse(c);
u.getViewingPlatform().setNominalViewingTransform();
u.addBranchGraph(scene);
}
public void keyPressed(KeyEvent e) {
//Invoked when a key has been pressed.
if (e.getKeyChar() == 's') {
xloc = xloc + .1f;
}
if (e.getKeyChar() == 'a') {
xloc = xloc - .1f;
}
}
public void keyReleased(KeyEvent e) {
// Invoked when a key has been released.
}
public void keyTyped(KeyEvent e) {
//Invoked when a key has been typed.
}
public void actionPerformed(ActionEvent e) {
// start timer when button is pressed
if (e.getSource() == go) {
if (!timer.isRunning()) {
timer.start();
}
} else {
height += .1 * sign;
if (Math.abs(height * 2) >= 1)
sign = -1.0f * sign;
if (height < -0.4f) {
trans.setScale(new Vector3d(1.0, .8, 1.0));
} else {
trans.setScale(new Vector3d(1.0, 1.0, 1.0));
}
trans.setTranslation(new Vector3f(xloc, height, 0.0f));
objTrans.setTransform(trans);
}
}
public static void main(String[] args) {
System.out.println("Program Started");
BouncingBall bb = new BouncingBall();
bb.addKeyListener(bb);
MainFrame mf = new MainFrame(bb, 256, 256);
}
}
分享到:
相关推荐
【标题】"弹跳小红球java源码-xscreensaver-5.38:xscreensaver-5.38" 指的是一款基于Java编写的屏幕保护程序,该程序包含了一个名为“弹跳小红球”的源代码。xscreensaver是Linux和Unix操作系统上的一个著名屏幕保护...
【标题】"弹跳小红球java源码-pongclock:乒乓球" 提供的是一个基于Java编程语言实现的简单游戏项目,名为"Pong Clock"。Pong是经典的电子游戏之一,通常涉及两个玩家控制的平台,用以击打一个小球。在这个版本中,...
### Java编写弹跳小球程序解析 #### 一、程序概述 本文将详细介绍一个使用Java编写的简单图形界面应用程序——弹跳小球。该程序利用了Swing组件库中的类来实现一个可以在窗口内自由弹跳的小球。通过按钮控制小球的...
"弹跳小红球java源码-xscreensaver:屏幕保护程序" 这个标题揭示了我们正在讨论的是一个Java编程项目,它与xscreensaver有关。xscreensaver是一个流行的开源屏幕保护程序集合,适用于多种操作系统,包括Linux和Unix。...
2. Java源代码文件:以.java为扩展名,包含实现弹跳小红球动画的类。 3. 构建脚本:如Makefile或build.gradle,用于编译和打包Java源码。 4. 资源文件:可能包含图片、音频或其他与屏幕保护程序相关的媒体资源。 5. ...
【标题】"弹跳小红球java源码-xscreensaver:jwz.org/xscreensaver/的分支" 提供的是一个基于Java编写的程序,用于在屏幕上显示动态效果,类似于XScreensaver中的一个小游戏或屏幕保护程序。XScreensaver是由Jamie ...
【标题】中的“弹跳小红球java源码”指的是一个使用Java编程语言实现的小程序,这个程序在屏幕上展示一个小红球动态弹跳的效果。它可能是xscreensaver的一部分,xscreensaver是一个流行的Linux和Unix系统上的屏幕...
当我们谈论“弹跳小红球Java源码”时,我们实际上在探讨一个用Java编写的程序,该程序创建了一个动画效果,一个小红球在屏幕上弹跳。这种类型的应用通常用于屏幕保护程序,例如著名的xscreensaver。在本篇中,我们将...
"弹跳小红球java源码-xscreensaver:我的xscreensaver分支-用于对模拟电视进行黑客攻击" 这个标题提到了两个主要概念:一是"弹跳小红球java源码",这指的是一个使用Java编程语言实现的程序,该程序可能是一个简单的...
《弹跳小红球Java源码解析:深入理解XScreensaver框架》 XScreensaver,一个广为人知的Linux屏幕保护程序库,以其丰富的动画效果和开源特性深受开发者喜爱。在XScreensaver 5.36版本中,我们找到了一个有趣的模块...
5. **跳跳球**:跳跳球游戏中,玩家控制一个弹跳的球,避开障碍物并尽可能长时间地游戏。源码会涵盖重力模拟、碰撞检测和游戏分数计算,适合深入学习游戏物理和碰撞处理。 6. **推箱子**:推箱子是一款策略游戏,...
【标题】"java会弹的小球(源码)"是一个基于Java编程语言实现的动态图形程序,它展示了如何使用Java的图形库来创建一个能够自由弹跳的小球动画。这个程序对于初学者来说是一个很好的实践项目,可以帮助他们理解事件...
【标题】中的“弹跳小红球java源码”指的是一个使用Java编程语言实现的屏幕保护程序,这个程序展示了一个小红球在屏幕上弹跳的效果。"xscreensaver"是Unix/Linux系统中广泛使用的屏幕保护程序集合,它包含了各种各样...
10. 7.bouncing ball - 弹跳球动画,展示了CSS3的物理运动模拟。 通过分析这些文件名,我们可以看出这个压缩包涵盖了各种基本和高级的CSS3动画技术,包括变换(transform)、过渡(transition)、动画(animation)...
Android源码频道提供的下载意味着这个项目是用Java语言编写的,因为Android平台主要使用Java或Kotlin作为开发语言。通过查看源代码,开发者可以了解到如何在Android系统中创建和控制图形对象的运动,以及如何实现帧...
在本项目"Java_testWithThread"中,我们探讨了一个基于Java Swing库实现的交互式应用程序,该程序展示了如何使用线程来控制具有两种颜色变化的弹跳球动画。这个项目对于初学者来说是一个很好的学习资源,它涵盖了多...
通过阅读和分析这个源码,我们可以深入理解开发者如何利用Java3D来实现游戏逻辑和视觉效果。 总之,"j3dtennis"是一个使用Java3D技术开发的3D网球游戏,展示了Java3D在游戏开发中的应用,包括图形渲染、物理模拟、...
4. **自定义动画库**: 如果源码中包含了自定义动画库,那么开发者可能已经封装了一些通用的等待提示动画组件,比如旋转的菊花、上下弹跳的小球等。这种库通常会提供简单的接口供其他部分代码调用,以展示或停止动画...
标题 "bouncing-ball:Java动画演示" 涉及的核心知识点是使用Java编程语言创建一个动态的、交互式的弹跳球动画。这个项目通常是为了展示Java的图形用户界面(GUI)编程能力,尤其是AWT(Abstract Window Toolkit)和...
2. “运动”:这表明源码涉及小球的动态行为,比如滚动、弹跳、加速或减速等。 3. “轨迹”:暗示了源码可能包含追踪小球运动路径的算法,这对于实现真实的物理模拟非常重要。 4. “安卓”:说明这些源码是为Android...