Timer计数器(模拟JAVA Thread)

本文介绍两个AS3计时器(Timer)的应用案例。第一个案例展示了如何使用计时器进行倒计时并更新界面上的时间显示;第二个案例则通过计时器控制动画帧的播放,实现了一个简单的游戏时钟效果,并包含了游戏结束与重新开始的功能。

var interval:uint=100
var repeat:uint=60
var myTimer:Timer=new Timer(interval,repeat)
myTimer.addEventListener(TimerEvent.TIMER, timerHandler);
myTimer.start();
function timerHandler(event:TimerEvent):void
{
//得到Timer类的实例
var timer:Timer=event.target
//计算秒数
var t:Number=timer.currentCount/10
//保留1位小数
time.text=t.toFixed(1)
}

 

例子2:

 

var totalTime:int=60
var repeat:int=clockBar_mc.totalFrames
var interval:int=totalTime*1000/repeat
var myTimer:Timer=new Timer(interval,repeat)
myTimer.addEventListener(TimerEvent.TIMER, timerHandler);
myTimer.start();
function timerHandler(event:TimerEvent):void
{
clockBar_mc.nextFrame()
}
over_btn.addEventListener(MouseEvent.CLICK,gameOver)
function gameOver(e:MouseEvent)
{
myTimer.stop()
}
restart_btn.addEventListener(MouseEvent.CLICK,gameRestart)
function gameRestart(e:MouseEvent)
{
clockBar_mc.gotoAndStop(1)
myTimer.reset()
myTimer.start()
}

### 舵机模拟匝道口分拣模块的Java代码实现 尽管舵机控制通常与嵌入式设备(如Arduino)关联更为紧密,但在某些场景下也可以通过Java编程语言结合特定库来间接操控舵机。这主要依赖于计算机与微控制器之间的通信协议(例如串口通信)。下面展示一种基于Java和RXTX库的方式,该方式允许PC端运行的Java应用程序发送指令给已配置好的Arduino或其他单片机平台。 #### RXTX库简介 RXTX 是一个开源项目,提供了跨平台支持下的串行通讯能力。它使得开发者能够在Windows、Linux 和 Mac OS X 上轻松建立 RS-232 连接并交换数据流。对于本案例来说,我们将借助此工具包把由Java编写的高级逻辑转化为低层次硬件驱动命令传递至目标装置上执行具体动作[^4]。 #### Java 实现思路概述 整个过程大致分为以下几个部分: 1. 配置好开发环境,确保安装有最新版JDK以及下载对应系统的RXTX二进制文件; 2. 编写一段初始化函数用于打开指定COM端口号并与之保持持续会话关系; 3. 定义若干方法封装不同种类的动作请求&mdash;&mdash;比如设置某个特定编号的伺服电机转动到预定义的角度范围内; 4. 主线程循环读取键盘输入或者监听网络事件队列进而调用相应的方法改变现场状态直至结束程序为止。 下面是具体的代码示例: ```java import gnu.io.*; import java.io.OutputStream; import java.util.Timers; public class ServoControl implements SerialPortEventListener { private static final String PORT_NAMES[] = {"COM3"}; // Replace with your actual port name private CommPortIdentifier portId = null; private SerialPort serialPort = null; private OutputStream outStream = null; public void initialize() throws Exception{ for(String pName :PORT_NAMES ){ try { portId = CommPortIdentifier.getPortIdentifier(pName); if(portId.isCurrentlyOwned()){ System.out.println("Error: Port is already in use."); return ; } serialPort=(SerialPort)portId.open(this.getClass().getName(), 2000); serialPort.setSerialPortParams(9600, SerialPort.DATABITS_8, SerialPort.STOPBITS_1, SerialPort.PARITY_NONE ); outStream=serialPort.getOutputStream(); new Thread(new SerialReader(serialPort.getInputStream())).start(); }catch(Exception e){ continue; } break; } if(outStream==null || !serialPort.isOpen()) throw new RuntimeException("Failed to open any available ports"); } public synchronized void sendCommand(char command)throws Exception{ byte [] buffer={command}; outStream.write(buffer); outStream.flush(); } @Override public void serialEvent(SerialPortEvent oEvent) {} public static void main(String args[])throws Exception{ ServoControl sc=new ServoControl(); sc.initialize(); Timer timer=new Timers.Timer(true); int count=0; while(count<5){ char cmd='L'; if((count%2)==1) cmd='R'; sc.sendCommand(cmd); Thread.sleep(2000); ++count; } sc.serialPort.close(); } } class SerialReader implements Runnable { InputStream inputStream=null; public SerialReader(InputStream ins){ this.inputStream=ins; } @Override public void run(){ byte[] readBuffer=new byte[1]; while(true){ try{ while(inputStream.available()>0){ int numBytes=inputStream.read(readBuffer); System.out.print(new String(readBuffer)); } Thread.sleep(50); }catch(Exception ex){} } } } ``` 上述例子中我们创建了一个名为`ServoControl` 的类继承自 `SerialPortEventListener`, 并实现了其唯一抽象方法 `serialEvent`. 此外还包含了几个辅助成员变量用来存储当前活动串口句柄及其输出流向量等等信息。最后在主函数里反复交替发出左右转向指示直到计数器达到上限才关闭链接退出应用[^4]. --- ####
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值