affinetransform java_java – AffineTransform鼠标瞄准旋转口吃90度

编辑:

哦!!!!!

有用!!!

似乎有一点它被修复但是错误的HTML文件被打开,所以错误的代码正在运行.我觉得很愚蠢,这应该是显而易见的.

但是谢谢!

实际上对这些东西有所帮助真是太棒了.无论何时我在其他任何地方寻求帮助,甚至问我的老师,我通常会被忽视或得到无用的建议.

(编辑结束)

我正在为java课程中的最终项目制作游戏.我只是让鼠标瞄准使用AffineTransform工作,但是当玩家对象旋转到90度(或它的倍数)时,它会做出这种奇怪的口吃.

下面是我特别关注的代码.

g2.drawImage(img, x_pos,y_pos,this);

AffineTransform oldTransform = g2.getTransform();

g2.setTransform(AffineTransform.getRotateInstance(radAngle,x_pos + (img.getWidth() / 2),y_pos+(img.getHeight() / 2)));

有人可以帮我弄清楚如何解决这个问题吗?我的项目明天到期,所以我的时间很短.

这是我使用的图像

继承人的代码.

import java.applet.*;

import java.awt.*;

import java.awt.event.*;

import java.awt.image.BufferedImage;

import java.lang.Math.*;

import java.awt.Graphics2D;

import java.awt.geom.AffineTransform;

import javax.imageio.ImageIO;

import java.io.*;

import java.net.URL;

public class Game extends Applet implements Runnable, KeyListener, MouseMotionListener

{

int x_pos = 250;

int y_pos = 250;

float x_speed = 0;

float y_speed = 0;

int radius = 20;

int appletsize_x = 800;

int appletsize_y = 600;

int x = 0;

int y = 0;

int up = 0;

int down= 0;

int left = 0;

int right= 0;

int mouse_x;

int mouse_y;

int tracking_angle;

private BufferedImage dbImage;

private Graphics dbg;

private Image curser;

BufferedImage img = null;

BufferedImage round = null;

AffineTransform at = new AffineTransform();

double radAngle;

public void init()

{

try {

URL url = new URL(getCodeBase(), "Player.png");

img = ImageIO.read(url);

} catch (IOException e) {System.out.println("Cant find player image");

}

try {

URL url = new URL(getCodeBase(), "round.png");

round = ImageIO.read(url);}

catch (IOException e) {}

setBackground (Color.blue);

setFocusable(true);

addKeyListener( this );

curser = getImage(getDocumentBase(), "mouse.png");

addMouseMotionListener(this);

try

{

Toolkit tk = Toolkit.getDefaultToolkit();

Cursor c = tk.createCustomCursor( curser,new Point( 5, 5 ), "Inodrop" );

setCursor( c );

}

catch( IndexOutOfBoundsException x )

{}

}

public class Shot {

int x_loc = -50;

int y_loc = -50;

public Shot(){

if(x_loc < 0){

x_loc = x_pos;}

if(y_loc < 0){

y_loc = y_pos;}

paint(dbg);}

public void paint(Graphics g){

System.out.println("hi");

Graphics2D g2d = (Graphics2D)g;

Graphics g2D = round.getGraphics();

g2d.drawImage(round, x_loc,y_loc,null);}}

public void start ()

{

Thread th = new Thread (this);

th.start ();

}

public void stop()

{

}

public void destroy()

{

}

public void mouseMoved(MouseEvent e){

//get position of mouse

mouse_x = e.getX();

mouse_y = e.getY();

double x_dist = mouse_x - x_pos;

double y_dist = mouse_y - y_pos;

if (x_dist == 0) {

radAngle = 90;

} else if ((x_dist == 0) && (y_dist == 0)) {

radAngle = 0;

} else {

radAngle = Math.atan(y_dist / x_dist);

}

tracking_angle = (int)(Math.sin(radAngle) * 100);

//System.out.println(Math.toRadians(tracking_angle));

}

public void mouseDragged(MouseEvent e){}

public void keyReleased(KeyEvent r)

{

//Left

if (r.getKeyCode() == 39 ){

x = 0;

left = 0;

Shot shoot = new Shot();

}

//Right

if (r.getKeyCode() == 37){

x = 0;

right = 0;

}

//Down

if (r.getKeyCode() == 38 ) {

//y_speed = 0;

down = 0;}

//Up

if (r.getKeyCode() == 40 ) {

//y_speed = 0;

up = 0;}

//move();

}

public void keyTyped(KeyEvent t){}

public void keyPressed(KeyEvent r){

//Left

if (r.getKeyCode() == 39 ){

left = 1;}

//Right

if (r.getKeyCode() == 37){

right = 1;}

//Down

if (r.getKeyCode() == 38 ) {

down = 1;}

//Up

if (r.getKeyCode() == 40 ) {

up = 1;}

//move();

}

public void run ()

{

Thread.currentThread().setPriority(Thread.MIN_PRIORITY);

while (true)

{

if (left == 1 && x_speed < 11){

x = 0;

x_speed += 1;

}

//Right

if (right == 1 && x_speed > -11){

x = 0;

x_speed -= 1;

}

//Down

if (down == 1 && y_speed > -11) {

y_speed -= 1;}

//Up

if (up == 1 && y_speed < 11) {

y_speed += 1;}

if( x == 0 && x_speed > 0){

x_speed -=.2;}

if( x == 0 && x_speed < 0){

x_speed +=.2;}

if( y == 0 && y_speed > 0){

y_speed -=.2;}

if( y == 0 && y_speed < 0){

y_speed +=.2;}

if (x_pos > appletsize_x - radius && x_speed > 0)

{

x_pos = radius;

}

else if (x_pos < radius && x_speed < 0)

{

x_pos = appletsize_x + radius ;

}

//System.out.println(y_pos);

if (y_pos > appletsize_y - radius && y_speed > 0){

y_speed = 0;}

else if ( y_pos < radius && y_speed < 0 ){

y_speed = 0;}

x_pos += (int)x_speed;

y_pos += (int)y_speed;

repaint();

try

{

Thread.sleep (15);

}

catch (InterruptedException ex)

{

}

Thread.currentThread().setPriority(Thread.MAX_PRIORITY);

}

}

public void update (Graphics g)

{

if (dbImage == null)

{

dbImage = new BufferedImage(this.getSize().width, this.getSize().height, BufferedImage.TYPE_INT_RGB);

dbg = dbImage.getGraphics ();

}

dbg.setColor (getBackground ());

dbg.fillRect (0, 0, this.getSize().width, this.getSize().height);

dbg.setColor (getForeground());

paint (dbg);

g.drawImage (dbImage, 0, 0, this);

}

public void paint (Graphics g)

{

//g = img.getGraphics();

Graphics2D g2 = (Graphics2D)g;

g2.drawImage(img, x_pos,y_pos,this);

AffineTransform oldTransform = g2.getTransform();

g2.setTransform(AffineTransform.getRotateInstance(radAngle,x_pos + (img.getWidth() / 2),y_pos+(img.getHeight() / 2)));

System.out.println(img.getWidth());

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值