基于Java的动画编程基础(一)

基本技术:

在Java中实现动画有很多种办法,但它们实现的基本原理是一样的,即在屏幕上画出一系列的帧来造成运动的感觉。

我们先构造一个程序的框架,再慢慢扩展,使之功能比较齐备。

使用线程:

为了每秒中多次更新屏幕,必须创建一个线程来实现动画的循环,这个循环要跟踪当前帧并响应周期性的屏幕更新要求。实现线程的方法有两种,你可以创建一个类Thread的派生类,或附和在一个Runnable的界面上。

一个容易犯的错误是将动画循环放在paint()中,这样占据了主AWT线程,而主线程将负责所有的绘图和事件处理。

一个框架applet如下:

public
  class Animator1 extends java.applet.Applet implements Runnable {
   int frame;
   int delay;
   Thread animator;
   public void init() {
    String str = getParameter("fps");
    int fps = (str != null) ? Integer.parseInt(str) : 10;
    delay = (fps > 0) ? (1000 / fps) : 100;
   }
   public vois start() {
    animator = new Thread(this);
    animator.start();
   }
   public void run() {
    while (Thread.currentThread() == animator) {
     repaint();
     try {
      Thread.sleep(delay);
     } catch (InterruptedException e) {
      break;
     }
    frame++;
   }
  }
  public void stop() {
   animator = null;
  }
 }

在你的HTML文件中这样引用:

<applet code=Animator1.class width=200 height=200>
<param name=fps value=200>
</applet>

上面的参数fps表示每秒的帧数

保持恒定的帧速度:

上例中,applet只是在每两帧之间休眠一个固定的时间,但这有些缺点,有时你会等很长时间,为了每秒显示十帧图象,不应该休眠100毫秒,因为在运行当中也耗费了时间。

这里有一个简单的补救方法:

public void run() {
long tm = System.currentTimeMillis();
while (Thread.currentThread() == animator) {
repaint();
try {
tm += delay;
Thread.sleep(Math.max(0,tm -
System.currentTimeMillis()));
} catch (InterruptedException e) {
break;
}
frame++;
}
}

时间: 2025-01-02 05:22:57

基于Java的动画编程基础(一)的相关文章

基于Java的动画编程基础(二)

画出每一帧: 剩下的就是将每一帧图象绘出.在上例中调用了applet的repaint()来绘出每一帧图象. public void paint(Graphics g) { g.setColor(Color.black); g.drawString("Frame " + frame, 0, 30); } 生成图形: 现在我们来画一些稍微困难的东西.下例画了一个正弦曲线的组合, 对于每一个x,画一条短的垂直线,所有这些线组成了一个图形,并且每帧变化. 但不幸有些闪动,在以后我们将解释为什么

使用IBM WebSphere Application Server执行基于Java的批处理编程

这一期将介绍 http://www.aliyun.com/zixun/aggregation/13387.html">WebSphere Application Server 批处理基础架构如何与企业调度程序相集成. IBM WebSphere Application Server V8.5 和更高版本为基于 Java 的批处理应用程序提供了一个执行平台.除了提供功能丰富的编程模型和高级特性,比如并行处理.跳过记录处理.重试步骤处理和 COBOL 支持,它还为批处理程序提供了企业级 &qu

Java多线程编程基础之线程和多线程

[写在前面] 随着计算机技术的发展,编程模型也越来越复杂多样化.但多线程编程模型 是目前计算机系统架构的最终模型.随着CPU主频的不断攀升,X86架构的硬件已 经成为瓶,在这种架构的CPU主频最高为4G.事实上目前3.6G主频的CPU已经接近了顶峰. 如果不能从根本上更新当前CPU的架构(在很长一段时间内还不太可能),那么 继续提高CPU性能的方法就是超线程CPU模式.那么,作业系统.应用程序要发挥 CPU的最大性能,就是要改变到以多线程编程模型为主的并行处理系统和并发式 应用程序. 所以,掌握

JAVA学习(五):Java面向对象编程基础

Java面向对象编程基础 面向对象(Object oriented programming,OOP)技术是一种强有力的软件开发方法,它采用数据抽象与信息隐藏技术,来使软件开发简单化,以达到代码重用的目的. 1.OOP的3个特性(封装.继承和多态性) 封装是类的基础,指把类的相关实现细节隐藏起来,在类中将数据和实现操作的代码集中起来放在对象的内部,调用这些类时只需直接使用类预留的接口就可以了. 继承提供了子类自动拥有父类数据结构和方法的机制,它表示类之间的一种关系. 多态指使一个对象被看成另一个对

vo封装-Java web编程基础 在线考试系统源代码

问题描述 Java web编程基础 在线考试系统源代码 一.功能说明 1.学生 学生使用学号和密码登录系统,实现在线答题,提交试卷后可以直接查看测试成绩. 2.教师 教师使用教师号和密码登录系统,可以实现题目表question的维护工作(增删改查). 二.结构说明 采用JSP+JavaBean模式,利用VO实现对象的封装. 三.界面说明 界面设计合理.友好,可操作性强,充分考虑用户的使用需求. 四.数据库说明 三张表: 1.学生表student:记录学生的学号.姓名.密码.测试成绩 2.教师表t

基于java.nio.channels的编程实践-II

介绍 为了提供并发处理效率,把用户的请求连接随机分配到线程池的线程进行处理,hbase也是采用同样的方式处理用户请求的 客户端代码可以参考:基于java.nio.channels的编程实践-I 代码 import java.io.IOException; import java.net.InetSocketAddress; import java.nio.ByteBuffer; import java.nio.channels.SelectionKey; import java.nio.chan

《Java 7程序设计入门经典》一第1章 Java编程基础 1.0

第1章 Java编程基础 本章要点 了解计算机的主要组成: 理解位.字节和二进制计数系统: 了解程序的两种形式: 了解Java的历史和设计理念: 理解面向对象编程的基本原则: 创建.编译并运行一个简单的Java程序: 使用变量: 使用if和for控制语句: 创建代码块: 理解语句是如何放置.缩进和结束的: 了解Java关键字: 理解Java标识符的规则. 仅仅在近十年的时间里,编程就从一门晦涩难懂的学科转变为现代社会不可或缺的一部分,从事编程工作的人也从少变多.其发展原因容易理解.如果仅仅用一个

Java的Socket网络编程基础知识入门教程_java

一.TCP/IP简介 TCP/IP协议族是互联网使用的协议,也可以用在独立的专用网络中. TCP/IP协议族包括了IP协议.TCP协议和UDP协议. IP协议使用IP地址来分发报文,但它是尽力而为的服务,报文可能丢失.乱序或者 重复发送.TCP和UDP协议在IP协议基础上增加了端口号,从而在两台主机的应用 程序间建立起透明的连接. 不同的是,TCP协议会对IP层的错误进行修复,它通过握手消息在主机间建立连接, 之后通过在消息中加入序列号来恢复消息中的错误.而UDP只是简单地扩展了IP协议, 使它

Java的Socket通讯基础编程完全指南_java

什么是Socket网络上的两个程序通过一个双向的通讯连接实现数据的交换,这个双向链路的一端称为一个Socket.Socket通常用来实现客户方和服务方的连接.Socket是TCP/IP协议的一个十分流行的编程界面,一个Socket由一个IP地址和一个端口号唯一确定. 但是,Socket所支持的协议种类也不光TCP/IP一种,因此两者之间是没有必然联系的.在Java环境下,Socket编程主要是指基于TCP/IP协议的网络编程. Socket通讯的过程Server端Listen(监听)某个端口是否