怎么用JAVA让一个图一直绕原点旋转啊

一半二分之一 2016-03-22 02:28:12
有大神知道怎么用JAVA让一个图一直绕原点旋转啊,每绕一圈停3秒再转
...全文
1018 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
一半二分之一 2016-03-23
  • 打赏
  • 举报
回复
引用 7 楼 zys59 的回复:
你这个应用是Android下的,而且是带框架的,是吧?这么我可就不太懂了,我建议你还是好好看看API文档吧,我估计能有很方便的解决方案。
是的,带框架的,不过谢啦
三仙半 2016-03-22
  • 打赏
  • 举报
回复
你这个应用是Android下的,而且是带框架的,是吧?这么我可就不太懂了,我建议你还是好好看看API文档吧,我估计能有很方便的解决方案。
一半二分之一 2016-03-22
  • 打赏
  • 举报
回复
引用 5 楼 zys59 的回复:
这会儿在公司,又来活儿了,晚上看看情况吧,要是方便的话再帮你看看。。。。。。
恩恩,谢谢了
三仙半 2016-03-22
  • 打赏
  • 举报
回复
这会儿在公司,又来活儿了,晚上看看情况吧,要是方便的话再帮你看看。。。。。。
一半二分之一 2016-03-22
  • 打赏
  • 举报
回复
引用 3 楼 zys59 的回复:

import java.awt.Canvas;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.image.BufferedImage;

/**
 * @author ZhengYesheng
 */
public class RotateImageCanvas extends Canvas implements Runnable
{
	private static final long serialVersionUID = -1997487731464495923L;

	BufferedImage img;
	BufferedImage rotatedImg;

	int degress = 0;

	public RotateImageCanvas(BufferedImage img)
	{
		super();
		this.img = img;
		new Thread(this).start();
	}

	@Override
	public void run()
	{
		while (true)
		{
			//A,与B的代码配合决定旋转的速度
			degress += 1;
			degress %= 360;
			repaint();
			try
			{
				if (degress == 0)
				{
					//绕一周后等待的时间在这里设置
					Thread.sleep(3 * 1000);
				}
				else
				{
					//考虑到视觉平滑,这里不应大约40。
					Thread.sleep(30);
				}
			}
			catch (InterruptedException e)
			{
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}

	@Override
	public void paint(Graphics graphics)
	{
		super.paint(graphics);
		//获取旋转指定角度后的图片。为了避免累计误差,这里是用原始图像旋转的
		rotatedImg = rotateImage(img, degress);
		//绘制旋转后的图片
		graphics.drawImage(rotatedImg, 0, 0, this);
	}

	/**
	 * 旋转图片为指定角度。
	 * 注意:1、这个方法实现了图像的基于中点的旋转,要想绕指定点,需要配合Matrix类
	 *          2、为避免图像被裁切,结果图片的尺寸也需要动态计算
	 *          3、现在旋转后有黑色背景,如果不需要这个效果,需要设置结果图片的Alpha模式
	 * 
	 * @param bufferedimage
	 *            目标图像
	 * @param degree
	 *            旋转角度
	 * @return
	 */
	private BufferedImage rotateImage(BufferedImage bufferedimage, int degree)
	{
		int w = bufferedimage.getWidth();
		int h = bufferedimage.getHeight();
		int type = bufferedimage.getColorModel().getTransparency();
		BufferedImage img;
		Graphics2D graphics2d;
		(graphics2d = (img = new BufferedImage(w, h, type)).createGraphics())
				.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR);
		graphics2d.rotate(Math.toRadians(degree), w / 2, h / 2);
		graphics2d.drawImage(bufferedimage, 0, 0, null);
		graphics2d.dispose();
		return img;
	}
}
package com.gameley.tar2.xui.components;

import a5game.motion.XColorRect;
import a5game.motion.XDelayTime;
import a5game.motion.XFadeTo;
import a5game.motion.XFiniteTimeMotion;
import a5game.motion.XLabelAtlas;
import a5game.motion.XMotion;
import a5game.motion.XMotionDelegate;
import a5game.motion.XMotionInterval;
import a5game.motion.XMotionNode;
import a5game.motion.XMoveTo;
import a5game.motion.XSequence;
import a5game.motion.XSprite;
import android.graphics.Color;

import com.gameley.race.view.ComponentBase;
import com.gameley.tar2.data.ResDefine;
import com.gameley.tools.Debug;
import com.gameley.tools.ScreenManager;

/**
 * 
 * 游戏启动时显示的小loading
 * @author weitao
 *
 */
public class LittleLoadingLayer extends ComponentBase implements XMotionDelegate
{
	

	private XLabelAtlas process_percent;
	private XSprite quan1 = null;
	private XSprite quan2 = null;
	
	public LittleLoadingLayer()
	{
		super();
		init();
	}
	
	@Override
	public void init()
	{
	    super.init();
	    
		//XSprite bg = new XSprite(ResDefine.LITTLELOADINGVIEW.LOADING_XIAO_0);
		XSprite bg = new XSprite(ResDefine.LITTLELOADINGVIEW.LOADING_XIAO_TEX);
		bg.setPos(ScreenManager.sharedScreenManager().getWidth()-bg.getWidth()/2, 440);
		this.addChild(bg);
		//quan1 = new XSprite(ResDefine.LITTLELOADINGVIEW.LOADING_XIAO_1);
		quan1 = new XSprite(ResDefine.LITTLELOADINGVIEW.LOADING_XIAO_LOGO);
		quan1.setPos(-bg.getWidth()/2-30, 0);
		bg.addChild(quan1);
		//quan2 = new XSprite(ResDefine.LITTLELOADINGVIEW.LOADING_XIAO_2);
		quan2 = new XSprite(ResDefine.LITTLELOADINGVIEW.LOADING_XIAO_DIQIU);
		quan2.setPos(-bg.getWidth()/2-30, 0);
		bg.addChild(quan2);
		XSprite hei = new XSprite(ResDefine.LITTLELOADINGVIEW.LOADING_XIAO_3);
		hei.setPos(-bg.getWidth()/2-30, 0);
		bg.addChild(hei);
		
		
	    process_percent = new XLabelAtlas('0', ResDefine.NEW_LOADINGVIEW.LOADING_SHUZI_JINDU,
	    		0+":", 12);
	    process_percent.setColor(0x00b8ff);
	   
	    process_percent.setPos(0,0);
	    hei.addChild(process_percent);
	    
//	    pointMotion();
	}

	
	
	
//	public void pointMotion()
//	{
//		point.setAlpha(0);
//		point.setPos(-point_bg.getWidth()/2, 0);
//		sequence = null;
//	    
//	    XMotionInterval moveto = new XMoveTo(2.0f, point_bg.getWidth()/2, 0);
//	    XMotionInterval fadein = new XFadeTo(0.6f, 1.0f);
//	    XMotionInterval dely = new XDelayTime(0.8f);
//	    XMotionInterval fadeout = new XFadeTo(0.6f, 0);
//	    XFiniteTimeMotion[] fa = new XFiniteTimeMotion[3];
//	    fa[0] = fadein;
//	    fa[1] = dely;
//	    fa[2] = fadeout;
//	    sequence = new XSequence(fa);
//	    point.runMotion(moveto);
//	    point.runMotion(sequence);
//	    sequence.setDelegate(this);
//	}
	private int p = 0;
	@Override
	public void cycle(float dt)
	{
	    super.cycle(dt);
		p++;
		quan1.setRotation(-p*3.6f);
		quan2.setRotation(-p*2.4f);
	    
//	    if (logoAm != null)
//        {
//	        logoAm.cycle(dt);
//        }
	    if (f_time > 0)
		{
	    	f_time -= dt;
	    	if (f_time <= 0)
			{
	    		process_percent.setString((int)f_start + ":");
	    		f_time = 0;
	    		f_start = f_now;
			}else 
			{
				f_start += f_v*dt;
				if (f_start >= 99)
                {
	                f_start = 99;
                }
				process_percent.setString((int)f_start + ":");
				
			}
		}
	}
	
	private float f_time = 0;
	private float f_v = 0;
	private float f_start = 0;
	private float f_now = 0;
	private float f_s = 0;
	public void setPercent(int percent)
	{
		f_time = .6f;
		f_now = percent;
		f_s = f_now - f_start;
		f_v = f_s / f_time;
	}

	@Override
    public void onMotionFinish(XMotion motion, XMotionNode node)
    {
//		if (motion == sequence)
//        {
//	        pointMotion();
//        }
    }

}
谢谢大神,这是我的代码,我旋转的只有98行到103行那边,貌似不能新建类了。只能在这里面改
三仙半 2016-03-22
  • 打赏
  • 举报
回复

import java.awt.Canvas;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.image.BufferedImage;

/**
 * @author ZhengYesheng
 */
public class RotateImageCanvas extends Canvas implements Runnable
{
	private static final long serialVersionUID = -1997487731464495923L;

	BufferedImage img;
	BufferedImage rotatedImg;

	int degress = 0;

	public RotateImageCanvas(BufferedImage img)
	{
		super();
		this.img = img;
		new Thread(this).start();
	}

	@Override
	public void run()
	{
		while (true)
		{
			//A,与B的代码配合决定旋转的速度
			degress += 1;
			degress %= 360;
			repaint();
			try
			{
				if (degress == 0)
				{
					//绕一周后等待的时间在这里设置
					Thread.sleep(3 * 1000);
				}
				else
				{
					//考虑到视觉平滑,这里不应大约40。
					Thread.sleep(30);
				}
			}
			catch (InterruptedException e)
			{
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}

	@Override
	public void paint(Graphics graphics)
	{
		super.paint(graphics);
		//获取旋转指定角度后的图片。为了避免累计误差,这里是用原始图像旋转的
		rotatedImg = rotateImage(img, degress);
		//绘制旋转后的图片
		graphics.drawImage(rotatedImg, 0, 0, this);
	}

	/**
	 * 旋转图片为指定角度。
	 * 注意:1、这个方法实现了图像的基于中点的旋转,要想绕指定点,需要配合Matrix类
	 *          2、为避免图像被裁切,结果图片的尺寸也需要动态计算
	 *          3、现在旋转后有黑色背景,如果不需要这个效果,需要设置结果图片的Alpha模式
	 * 
	 * @param bufferedimage
	 *            目标图像
	 * @param degree
	 *            旋转角度
	 * @return
	 */
	private BufferedImage rotateImage(BufferedImage bufferedimage, int degree)
	{
		int w = bufferedimage.getWidth();
		int h = bufferedimage.getHeight();
		int type = bufferedimage.getColorModel().getTransparency();
		BufferedImage img;
		Graphics2D graphics2d;
		(graphics2d = (img = new BufferedImage(w, h, type)).createGraphics())
				.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR);
		graphics2d.rotate(Math.toRadians(degree), w / 2, h / 2);
		graphics2d.drawImage(bufferedimage, 0, 0, null);
		graphics2d.dispose();
		return img;
	}
}
一半二分之一 2016-03-22
  • 打赏
  • 举报
回复
引用 1 楼 zys59 的回复:
建一个Canvas,准备将你要的绘制的图绘制在它上,然后,启动一个线程,绘制,OK了
我有两个图片,都是绕原点旋转的。我想改变其中一个的旋转半径,让他看上去是绕着另一个图的表面在旋转的。这个怎么执行啊 private int p = 0; @Override public void cycle(float dt) { super.cycle(dt); p++; quan1.setRotation(-p*3.6f); quan2.setRotation(-p*2.4f); } 这是旋转的代码 这是里面的 setRotation函数 public void setRotation(float rotation) { if (this.rotation != rotation) { this.rotation = rotation; isTransformDirty = isInverseDirty = true; } }
三仙半 2016-03-22
  • 打赏
  • 举报
回复
建一个Canvas,准备将你要的绘制的图绘制在它上,然后,启动一个线程,绘制,OK了

58,452

社区成员

发帖
与我相关
我的任务
社区描述
Java Eclipse
社区管理员
  • Eclipse
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧