我正在尝试制作一个简单的Java游戏,其中一个大球吃较小的球。我做到了现在我希望大球在吃小球时“成长”,但我不知道如何用Java重新调整图像大小。提前谢谢!
MovableBall.java:
import java.awt.Image;
import java.awt.Rectangle;
import java.awt.event.KeyEvent;
import javax.swing.ImageIcon;
public class MovableBall {
private String craft = "ball.png";
private int dx;
private int dy;
private int x;
private int y;
private int width;
private int height;
private int mx = 200, my = 150;
private Image image;
public MovableBall() {
ImageIcon ii = new ImageIcon(this.getClass().getResource(craft));
image = ii.getImage();
x = 5;
y = 5;
width = image.getWidth(null);
height = image.getHeight(null);
}
public void move() {
x += dx;
y += dy;
}
public int getX() {
return x;
}
public int getY() {
return y;
}
public Image getImage() {
return image;
}
public void keyPressed(KeyEvent e) {
int key = e.getKeyCode();
if (key == KeyEvent.VK_LEFT) {
dx = -1;
}
if (key == KeyEvent.VK_RIGHT) {
dx = 1;
}
if (key == KeyEvent.VK_UP) {
dy = -1;
}
if (key == KeyEvent.VK_DOWN) {
dy = 1;
}
}
public void keyReleased(KeyEvent e) {
int key = e.getKeyCode();
if (key == KeyEvent.VK_LEFT) {
dx = 0;
}
if (key == KeyEvent.VK_RIGHT) {
dx = 0;
}
if (key == KeyEvent.VK_UP) {
dy = 0;
}
if (key == KeyEvent.VK_DOWN) {
dy = 0;
}
}
public Rectangle getBounds() {
return new Rectangle(x, y, width, height);
}
}
FoodBoard.java:
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Rectangle;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import javax.swing.JPanel;
import javax.swing.Timer;
public class FoodBoard extends JPanel implements ActionListener {
private Timer timer;
private MovableBall ball;
private Food[] foods = { new Food(), new Food(), new Food(), new Food(),
new Food(), new Food() };
private int B_WIDTH;
private int B_HEIGHT;
public FoodBoard() {
addKeyListener(new TAdapter());
setBackground(Color.black);
setSize(400, 300);
setDoubleBuffered(true);
ball = new MovableBall();
// WURRY important:
setFocusable(true);
// every 5 ms the timer will call the actionPerformed() method
timer = new Timer(5, this);
timer.start();
}
public void addNotify() {
super.addNotify();
B_WIDTH = getWidth();
B_HEIGHT = getHeight();
}
public void checkIfEaten() {
Rectangle r3 = ball.getBounds();
for (int j = 0; j < foods.length; j++) {
Food a = foods[j];
Rectangle r2 = a.getBounds();
if (r3.intersects(r2)) {
a.setVisible(false);
}
}
}
public void paint(Graphics g) {
super.paint(g);
Graphics2D g2d = (Graphics2D) g;
for (int i = 0; i < foods.length; i++) {
Food f = foods[i];
if (f.isVisible()) {
g2d.drawImage(f.getImage(), f.getX(), f.getY(), this);
}
}
g2d.drawImage(ball.getImage(), ball.getX(), ball.getY(), this);
Toolkit.getDefaultToolkit().sync();
g.dispose();
}
@Override
public void actionPerformed(ActionEvent e) {
ball.move();
checkIfEaten();
repaint();
}
private class TAdapter extends KeyAdapter {
public void keyReleased(KeyEvent e) {
ball.keyReleased(e);
}
public void keyPressed(KeyEvent e) {
ball.keyPressed(e);
}
}
}
答案 0 :(得分:1)
你可以调整像这样的图像,
Image new_image = old_image.getScaledInstance( new_width, new_height, java.awt.Image.SCALE_SMOOTH ) ;
确保球不超过最大尺寸,
if(prevImage.getWidth(null) >= max_width || prevImage.getHeight(null) >= max_height)
{
System.out.println("MAX Size reached !");
}
else
{
// increase the size
Image new_image = old_image.getScaledInstance( new_width, new_height, java.awt.Image.SCALE_SMOOTH ) ;
}
答案 1 :(得分:1)
如果你有一个Image对象,你真的不需要担心它的大小,只需使用
yourImage.getScaledInstance(newWidth, newHeight, Image.SCALE_DEFAULT);
你想要改变newWidth / newHeight参数,但除此之外,你应该好好去!您可以阅读更多here.
希望这有帮助!