`
starbhhc
  • 浏览: 658074 次
  • 性别: Icon_minigender_2
  • 来自: 深圳
社区版块
存档分类
最新评论

3D弹跳球动画-Java源码

阅读更多
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-5.38:xscreensaver-5.38" 指的是一款基于Java编写的屏幕保护程序,该程序包含了一个名为“弹跳小红球”的源代码。xscreensaver是Linux和Unix操作系统上的一个著名屏幕保护...

    弹跳小红球java源码-pongclock:乒乓球

    【标题】"弹跳小红球java源码-pongclock:乒乓球" 提供的是一个基于Java编程语言实现的简单游戏项目,名为"Pong Clock"。Pong是经典的电子游戏之一,通常涉及两个玩家控制的平台,用以击打一个小球。在这个版本中,...

    java编写弹跳的小球源代码(转载)

    ### Java编写弹跳小球程序解析 #### 一、程序概述 本文将详细介绍一个使用Java编写的简单图形界面应用程序——弹跳小球。该程序利用了Swing组件库中的类来实现一个可以在窗口内自由弹跳的小球。通过按钮控制小球的...

    弹跳小红球java源码-xscreensaver:屏幕保护程序

    "弹跳小红球java源码-xscreensaver:屏幕保护程序" 这个标题揭示了我们正在讨论的是一个Java编程项目,它与xscreensaver有关。xscreensaver是一个流行的开源屏幕保护程序集合,适用于多种操作系统,包括Linux和Unix。...

    弹跳小红球java源码-xscreensaver:xscreensaver(从https://anonscm.debian.org/cgit/

    2. Java源代码文件:以.java为扩展名,包含实现弹跳小红球动画的类。 3. 构建脚本:如Makefile或build.gradle,用于编译和打包Java源码。 4. 资源文件:可能包含图片、音频或其他与屏幕保护程序相关的媒体资源。 5. ...

    弹跳小红球java源码-xscreensaver:jwz.org/xscreensaver/的分支

    【标题】"弹跳小红球java源码-xscreensaver:jwz.org/xscreensaver/的分支" 提供的是一个基于Java编写的程序,用于在屏幕上显示动态效果,类似于XScreensaver中的一个小游戏或屏幕保护程序。XScreensaver是由Jamie ...

    弹跳小红球java源码-xscreensaver:一个包含我能找到的所有版本的xscreensaver的存储库。完整的历史记录到版本1.21。

    【标题】中的“弹跳小红球java源码”指的是一个使用Java编程语言实现的小程序,这个程序在屏幕上展示一个小红球动态弹跳的效果。它可能是xscreensaver的一部分,xscreensaver是一个流行的Linux和Unix系统上的屏幕...

    弹跳小红球java源码-xscreensaver:此版本的xscreensaver旨在与swayidle一起使用。如果没有它,它将无法正常工作

    当我们谈论“弹跳小红球Java源码”时,我们实际上在探讨一个用Java编写的程序,该程序创建了一个动画效果,一个小红球在屏幕上弹跳。这种类型的应用通常用于屏幕保护程序,例如著名的xscreensaver。在本篇中,我们将...

    弹跳小红球java源码-xscreensaver:我的xscreensaver分支-用于对模拟电视进行黑客攻击

    "弹跳小红球java源码-xscreensaver:我的xscreensaver分支-用于对模拟电视进行黑客攻击" 这个标题提到了两个主要概念:一是"弹跳小红球java源码",这指的是一个使用Java编程语言实现的程序,该程序可能是一个简单的...

    弹跳小红球java源码-xscreensaver-5.36:XScreensaver源,修改为向XAnalogTV屏幕保护程序添加更多频道(图

    《弹跳小红球Java源码解析:深入理解XScreensaver框架》 XScreensaver,一个广为人知的Linux屏幕保护程序库,以其丰富的动画效果和开源特性深受开发者喜爱。在XScreensaver 5.36版本中,我们找到了一个有趣的模块...

    java小游戏源码集合

    5. **跳跳球**:跳跳球游戏中,玩家控制一个弹跳的球,避开障碍物并尽可能长时间地游戏。源码会涵盖重力模拟、碰撞检测和游戏分数计算,适合深入学习游戏物理和碰撞处理。 6. **推箱子**:推箱子是一款策略游戏,...

    java会弹的小球(源码)

    【标题】"java会弹的小球(源码)"是一个基于Java编程语言实现的动态图形程序,它展示了如何使用Java的图形库来创建一个能够自由弹跳的小球动画。这个程序对于初学者来说是一个很好的实践项目,可以帮助他们理解事件...

    弹跳小红球java源码-xscreensaver:最接近已知存在的xscreensavergitrepo的东西,因为jwz不做Github

    【标题】中的“弹跳小红球java源码”指的是一个使用Java编程语言实现的屏幕保护程序,这个程序展示了一个小红球在屏幕上弹跳的效果。"xscreensaver"是Unix/Linux系统中广泛使用的屏幕保护程序集合,它包含了各种各样...

    基于HTML的css3动画特效制作源码.zip

    10. 7.bouncing ball - 弹跳球动画,展示了CSS3的物理运动模拟。 通过分析这些文件名,我们可以看出这个压缩包涵盖了各种基本和高级的CSS3动画技术,包括变换(transform)、过渡(transition)、动画(animation)...

    小球跳到的动画效果

    Android源码频道提供的下载意味着这个项目是用Java语言编写的,因为Android平台主要使用Java或Kotlin作为开发语言。通过查看源代码,开发者可以了解到如何在Android系统中创建和控制图形对象的运动,以及如何实现帧...

    Java_testWithThread:带有2种变化颜色的弹跳球

    在本项目"Java_testWithThread"中,我们探讨了一个基于Java Swing库实现的交互式应用程序,该程序展示了如何使用线程来控制具有两种颜色变化的弹跳球动画。这个项目对于初学者来说是一个很好的学习资源,它涵盖了多...

    j3dtennis java3d 游戏

    通过阅读和分析这个源码,我们可以深入理解开发者如何利用Java3D来实现游戏逻辑和视觉效果。 总之,"j3dtennis"是一个使用Java3D技术开发的3D网球游戏,展示了Java3D在游戏开发中的应用,包括图形渲染、物理模拟、...

    Android 等待提示动画源码.zip

    4. **自定义动画库**: 如果源码中包含了自定义动画库,那么开发者可能已经封装了一些通用的等待提示动画组件,比如旋转的菊花、上下弹跳的小球等。这种库通常会提供简单的接口供其他部分代码调用,以展示或停止动画...

    bouncing-ball:Java动画演示

    标题 "bouncing-ball:Java动画演示" 涉及的核心知识点是使用Java编程语言创建一个动态的、交互式的弹跳球动画。这个项目通常是为了展示Java的图形用户界面(GUI)编程能力,尤其是AWT(Abstract Window Toolkit)和...

    安卓小球运动源码合集

    2. “运动”:这表明源码涉及小球的动态行为,比如滚动、弹跳、加速或减速等。 3. “轨迹”:暗示了源码可能包含追踪小球运动路径的算法,这对于实现真实的物理模拟非常重要。 4. “安卓”:说明这些源码是为Android...

Global site tag (gtag.js) - Google Analytics