0 0

java图片滚动处理30

代码如下,bug是:1.当score从9增至10时,十位数不发生滚动。
2.当图片滚动到大于一半路程时,会突然不滚动,直接到达目标位置。
3.图片出现在setClip区域外(图片是30*32分辨率,bug3处)
图片和源代码在附件里面。
package myJava;

import java.awt.*;
import javax.swing.*;

public class Test extends JFrame{
	public static void main(String args[]){
		JFrame mainTask = new JFrame();
		mainTask.setSize(120,120);
		mainTask.add(new Canvas(),BorderLayout.CENTER);
		mainTask.setResizable(false);
		mainTask.setVisible(true);
		mainTask.setLocationRelativeTo(null);
		mainTask.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	}
}
class Inf {
	public static final String NUM_DIR = "num/";
	public static final Image[] number= {
		new ImageIcon(Inf.class.getResource(NUM_DIR+"number_0.gif")).getImage(),
		new ImageIcon(Inf.class.getResource(NUM_DIR+"number_1.gif")).getImage(),
		new ImageIcon(Inf.class.getResource(NUM_DIR+"number_2.gif")).getImage(),
		new ImageIcon(Inf.class.getResource(NUM_DIR+"number_3.gif")).getImage(),
		new ImageIcon(Inf.class.getResource(NUM_DIR+"number_4.gif")).getImage(),
		new ImageIcon(Inf.class.getResource(NUM_DIR+"number_5.gif")).getImage(),
		new ImageIcon(Inf.class.getResource(NUM_DIR+"number_6.gif")).getImage(),
		new ImageIcon(Inf.class.getResource(NUM_DIR+"number_7.gif")).getImage(),
		new ImageIcon(Inf.class.getResource(NUM_DIR+"number_8.gif")).getImage(),
		new ImageIcon(Inf.class.getResource(NUM_DIR+"number_9.gif")).getImage(),
	};
	private static final int x0 = 0;
	private static final int y0 = 21;
	public static int score = 8;
	private static int[] lastScoreBit = {score%10,score%100/10,score%1000/100,score/1000};
	private static int[] y = {0,0,0,0};
	public static void drawScore(Graphics g){
		int[] scoreBit = {score%10,score%100/10,score%1000/100,score/1000};
		g.setClip(x0,y0,x0+120,y0+32);   //bug3
		for(int i=0;i<scoreBit.length;i++)
		{
			if(lastScoreBit[i]==scoreBit[i])
				g.drawImage(Inf.number[scoreBit[i]],x0+90-30*i,y0,null);
			else
			{	
				g.drawImage(Inf.number[lastScoreBit[i]],x0+90,y0-y[i],null);
				g.drawImage(Inf.number[scoreBit[i]],x0+90,y0+32-y[i],null);
				System.out.println("y[0]="+y[0]);
				//score进位时 差时滚动的处理
				if((i==0 || (y[i-1]>y0/2 || y[i]>y0/2)) && y0==y[i]++)
				{
					lastScoreBit[i] = scoreBit[i];
					y[i]=0;
				}
			}
		}
	}
}

class Canvas extends JPanel implements Runnable{
	private static int i = 0;
	Canvas(){
		new Thread(this).start();
	}
	@Override
	public void run(){
		while(true){
			try{
				Thread.sleep(40);
			}
			catch(Exception e){}
			if(i++%50==0)
				Inf.score++;
			repaint();
		}
	}
	@Override
	public void paintComponent(Graphics g){
		Inf.drawScore(g);
		g.setClip(0,0,this.getWidth(),this.getHeight());
	}
}

问题补充:第2个bug我解决了,呵呵,49行改成if((i==0 || (y[i-1]>y0/2 || y[i]>y0/2)) && 32==y[i]++)

问题补充:第1个bug我也解决了,45、46行改成
gOffScreen.drawImage(Img.number[lastScoreBit[i]],x0+90-30*i,y0-y[i],null);
gOffScreen.drawImage(Img.number[scoreBit[i]],x0+90-30*i,y0+32-y[i],null);
请问大家第三个bug是为什么啊?

问题补充:第3个bug也解决了……38行改成g.setClip(x0,y0,30,32);
setClip的四个参数分别是x,y,w,h
汗……我这么二。。。
2012年6月17日 13:13

1个答案 按时间排序 按投票排序

0 0

package myJava;

import java.awt.BorderLayout;
import java.awt.Graphics;
import java.awt.Image;

import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JPanel;

@SuppressWarnings("serial")
public class Test extends JFrame{
public static void main(String args[]){
JFrame mainTask = new JFrame();
mainTask.setSize(120,120);
mainTask.add(new Canvas(),BorderLayout.CENTER);
mainTask.setResizable(false);
mainTask.setVisible(true);
mainTask.setLocationRelativeTo(null);
mainTask.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
class Inf {
public static final String NUM_DIR = "num/";
public static final Image[] number= {
new ImageIcon(Inf.class.getResource(NUM_DIR+"number_0.gif")).getImage(),
new ImageIcon(Inf.class.getResource(NUM_DIR+"number_1.gif")).getImage(),
new ImageIcon(Inf.class.getResource(NUM_DIR+"number_2.gif")).getImage(),
new ImageIcon(Inf.class.getResource(NUM_DIR+"number_3.gif")).getImage(),
new ImageIcon(Inf.class.getResource(NUM_DIR+"number_4.gif")).getImage(),
new ImageIcon(Inf.class.getResource(NUM_DIR+"number_5.gif")).getImage(),
new ImageIcon(Inf.class.getResource(NUM_DIR+"number_6.gif")).getImage(),
new ImageIcon(Inf.class.getResource(NUM_DIR+"number_7.gif")).getImage(),
new ImageIcon(Inf.class.getResource(NUM_DIR+"number_8.gif")).getImage(),
new ImageIcon(Inf.class.getResource(NUM_DIR+"number_9.gif")).getImage(),
};
private static final int x0 = 0;
private static final int y0 = 21;
public static int score = 8;
private static int[] lastScoreBit = {score%10,score%100/10,score%1000/100,score/1000};
private static int[] y = {0,0,0,0};
public static void drawScore(Graphics g){
int[] scoreBit = {score%10,score%100/10,score%1000/100,score/1000};
g.setClip(x0,y0,x0+120,y0+32);
for(int i=0;i<scoreBit.length;i++)
{
if(lastScoreBit[i]==scoreBit[i])
g.drawImage(Inf.number[scoreBit[i]],x0+90-30*i,y0,null);
else
{
g.drawImage(Inf.number[lastScoreBit[i]],x0+90,y0-y[i],null);
g.drawImage(Inf.number[scoreBit[i]],x0+90,y0,null);
System.out.println("y[0]="+y[0]);
//score进位时 差时滚动的处理
if((i==0 || (y[i-1]>y0/2 || y[i]>y0/2)) && y0==y[i]++)
{
lastScoreBit[i] = scoreBit[i];
y[i]=0;
}
}
}
}
}

@SuppressWarnings("serial")
class Canvas extends JPanel implements Runnable{
private static int i = 0;
Canvas(){
new Thread(this).start();
}
public void run(){
while(true){
try{
Thread.sleep(40);
}
catch(Exception e){}
if(i++%50==0)
Inf.score++;
repaint();
}
}
public void paintComponent(Graphics g){
Inf.drawScore(g);
g.setClip(0,0,this.getWidth(),this.getHeight());
}
}

2012年6月18日 00:04

相关推荐

    Java跑马灯 图片滚动特效.rar

    Java跑马灯图片滚动特效是一种常见的视觉效果,常用于网页、软件界面或移动应用中,以吸引用户注意力或展示信息。这个"Java跑马灯 图片滚动特效.rar"压缩包包含了一个实现这种效果的Java源码示例,对于初学者来说,...

    java图片浏览管理系统

    Java图片浏览管理系统可能使用了其中之一来构建用户界面,包括按钮、文本框、滚动条、菜单等元素。 3. **文件I/O操作**:系统需要读取并管理图片文件,这就涉及到Java的File类和IO流。通过File类可以获取文件路径、...

    图片滚动特效

    综上所述,"图片滚动特效"项目涵盖了Java编程、GUI设计、事件处理、动画机制、图像处理、布局管理等多个知识点,对于提升开发者在这些领域的技能有着积极的作用。在实际开发中,还需要结合良好的编程实践,以保证...

    Java制作滚动相册

    在Java编程领域,制作滚动相册是一个常见的应用场景,它能够以动态的方式展示一系列图片,给用户带来生动的视觉体验。这个项目中包含了图片资源和源代码,非常适合初学者学习和理解Java图形用户界面(GUI)的开发。...

    java实现图片中心放大、缩小、移动、鼠标拖移

    在Java编程语言中,处理图像是...通过以上步骤,我们可以在Java中实现一个功能齐全的图像处理组件,能够支持图片的中心放大、缩小、移动以及鼠标拖移。这在开发涉及图像交互的应用,如地图应用或图像编辑器时非常有用。

    java 滚动的珠子

    在实际项目中,开发者可能用到Java的图像处理功能,如`ImageIcon`类来加载和显示图片。 总之,"java 滚动的珠子"这个项目涵盖了Java编程中的许多核心概念和技术,包括面向对象编程、图形绘制、事件处理、线程管理、...

    jQuery+CSS实现的图片滚动效果

    在实现图片滚动效果时,jQuery的主要作用是处理用户交互和控制动画的执行。 1. **DOM操作**:jQuery提供了简洁的API来选取和操作DOM元素。例如,可以使用`$("#elementID")`选择指定ID的元素,`$(".class")`选择具有...

    js实现的图片滚动展示

    以上就是关于“js实现的图片滚动展示”的主要知识点,它涉及了JavaScript基础、DOM操作、定时器、事件处理、动画效果、兼容性、响应式设计以及用户体验等多个方面。通过掌握这些技能,开发者可以创建出更加生动、...

    Android实现高级图片滚动控件,3D版的图片轮播器Demo_图片滚动展示.zip

    在Android开发中,图片滚动控件是常见的UI组件,用于展示多张图片并实现自动轮播效果,增强用户体验。本项目“Android高级图片滚动控件,3D版的图片轮播器Demo”专注于提供一种独特且引人入胜的3D图片展示方式,让...

    Android 焦点图片滚动源码-IT计算机-毕业设计.zip

    在Android开发领域,焦点图片滚动通常是指一种动态展示图片的方式,常见于应用的启动页、广告轮播或者图片展示模块。这种效果可以增加用户界面的吸引力,并提供丰富的用户体验。本项目是一个基于Android平台的焦点...

    netbeans下Java编的图片管理系统,打开图片后实现自动播放功能

    1. 文件I/O操作:Java的`java.io`包提供了处理文件和目录的类,如`File`,用来读取、创建和管理图片所在的文件夹。 2. 图片处理:可能使用了`javax.imageio`包中的类,如`ImageIO`,读取、显示和保存图片。 3. 图形...

    java图片浏览器

    【Java图片浏览器】是一个基于Java ...总的来说,这个Java图片浏览器项目涵盖了Swing GUI编程的基础,包括组件布局、事件处理、自定义绘图以及图片处理等多个方面,为学习和理解Java桌面应用开发提供了很好的实例。

    图片浏览器(java语言)

    在IT行业中,开发一款图片浏览器是一项常见的任务,...总之,开发一个Java图片浏览器涵盖了Java GUI编程、文件I/O、图像处理、事件驱动编程等多个核心知识点,对于提升Java编程技能和理解软件工程流程有着极大的帮助。

    java 图片的缩放与拉伸

    在Java编程语言中,处理图像是一项常见的任务,其中包括图片的缩放和拉伸。本文将深入探讨如何使用Java实现这一功能,特别是在实际项目中的应用。标题"java 图片的缩放与拉伸"直指核心问题,即如何改变图片的尺寸以...

    java 图片浏览器

    【Java 图片浏览器】是一种基于...通过分析这个Java图片浏览器项目,开发者可以学习到Java GUI编程的基本原理,文件操作,图像处理,事件驱动编程,以及如何组织和设计类结构,这些都是Java开发中不可或缺的知识点。

    java结合jquery插件实现无限滚动自动翻页源代码.

    4. **Java后端**:Java作为服务器端语言,负责处理Ajax请求,从数据库中查询数据,然后将这些数据封装成JSON或XML格式返回给前端。这通常涉及到Spring MVC或者Struts等Java Web框架,它们提供了一种结构化的方式来...

    java源码包---java 源码 大量 实例

     util实现Java图片水印添加功能,有添加图片水印和文字水印,可以设置水印位置,透明度、设置对线段锯齿状边缘处理、水印图片的路径,水印一般格式是gif,png,这种图片可以设置透明度、水印旋转等,可以参考代码...

    纯Java实现整个网页截图项目源代码

    在本项目中,"纯Java实现整个网页截图项目源代码" 是一个利用Java编程语言来实现的实用程序,它能够捕获整个网页的图像并将其保存为图片文件。这个项目的核心在于利用DJNativeSwing组件,这是一个开源的Java库,它...

    java 纹理填充特效源码

    此外,还可以结合Java的多线程和动画框架,创建动态的纹理填充特效,如滚动纹理、随机纹理变化等。 在实际项目中,可能还需要考虑性能优化,因为大量的图像处理可能会消耗大量计算资源。可以使用缓存技术、预处理...

Global site tag (gtag.js) - Google Analytics