【露】鱼儿鱼儿 你别闪了

要实现一个什么东西呢?

模拟在几台计算机屏幕上连贯的显示出一条鱼游动的整个动画,即一条鱼从一台计算机的屏幕慢慢游到另一台计算机的屏幕上。游动时,要求看起来像是同一条鱼在一个整体的屏幕上游动。

看起来很神奇吧,这就是我准备拿来熟悉软件结构和语言的一个程序,16页代码,我竟然真的打出来了!!!好佩服我自己!

编译的时候使用

java -encoding UTF-8 -d . *.java

-encoding UTF-8 是为了避免乱码,不然会是这样


最后会自动根据程序中的package设置,形成文件夹,非常方便

运行结果

服务器端


客户端


客户端界面


看起来很完美吧,其实鱼儿是在一闪一闪的,这一条完整的截图了好久可怜

给你们看半条鱼


好可怜!从中斩断!

书上说让我双缓存技术,没办法,翻到前几章把这块儿看了一下,又从网上百度了一堆代码,改啊改,鱼儿闪啊闪,要崩溃了抓狂

	public void paintComponent(Graphics g)
	{
		super.paintComponent(g);
		if((getSize().width != 600)||(getSize().height!=468))
		initOffGraphics();
		if(offImage!=null)
			g.drawImage(offImage,0,0,this);
	}
	
	public void initOffGraphics()
	{
		int width = getWidth();
		int height = getHeight();
		offImage = createImage(width,height);
		offGraphics = offImage.getGraphics();
		offPaint(offGraphics);
	}
	
	public void offPaint(Graphics g)
	{
		g.drawImage(imageOfBackground,0,0,getWidth(),getHeight(),this);
		try
		{
			//加载背景图片后,等待30毫秒
			Thread.sleep(30);
		}
		catch(Exception ex)
		{
			ex.printStackTrace();
		}
		//鱼向左右游动时显示的图片不同
		if(fish.right == 1)
		{
			g.drawImage(imageOfFishOnRight,fish.x,fish.y,this);
		}
		else
		{
			g.drawImage(imageOfFishOnLeft,fish.x,fish.y,this);
		}
	}

这是双缓存部分的代码,各位大神,看出问题的求指教! 可怜

明天理清程序思路,画出程序结构图。各位加油!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
好的,我可以为您提供一个基于HTML5 Canvas的鱼儿游动的动态效果。以下是代码示例: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>鱼儿游动</title> <style> canvas { border: 1px solid #000; } </style> </head> <body> <canvas id="myCanvas" width="600" height="400"></canvas> <script> var canvas = document.getElementById('myCanvas'); var ctx = canvas.getContext('2d'); // 鱼儿对象 var fish = { x: canvas.width / 2, // 初始X坐标 y: canvas.height / 2, // 初始Y坐标 radius: 20, // 半径 color: '#ff9800', // 颜色 speed: 2, // 移动速度 angle: Math.random() * 360, // 移动方向 draw: function() { // 绘制鱼儿 ctx.beginPath(); ctx.arc(this.x, this.y, this.radius, 0, Math.PI * 2, true); ctx.closePath(); ctx.fillStyle = this.color; ctx.fill(); }, update: function() { // 更新鱼儿状态 this.x += this.speed * Math.cos(this.angle * Math.PI / 180); this.y += this.speed * Math.sin(this.angle * Math.PI / 180); if (this.x < this.radius || this.x > canvas.width - this.radius) { this.angle = 180 - this.angle; } if (this.y < this.radius || this.y > canvas.height - this.radius) { this.angle = -this.angle; } } }; // 循环绘制和更新场景 function drawScene() { ctx.clearRect(0, 0, canvas.width, canvas.height); fish.draw(); fish.update(); } setInterval(drawScene, 20); // 每20毫秒更新一次 </script> </body> </html> 如果您将以上代码保存为一个名为“fish.html”的文件,并在浏览器中打开该文件,您将会看到一个随机移动的橙色圆圈,类似于一条游动的鱼儿

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值