我一直在嘗試一段時間,以獲得一個在Java中的遊戲,在對其他人民的痛苦之後,我做了我自己的雪碧功能,不明白爲什麼我不能擦除它。我知道它會改變背景的像素以顯示我的射手精靈,因爲它顯示出來,但無論出於什麼原因,我都無法將像素更改回原來的樣子。有沒有人有一個想法,爲什麼這是或我可以如何解決它? 鏈接到谷歌文檔與圖像: https://docs.google.com/document/d/1eU6faW1d7valq1yE_Bo09IPMbXuuZ6ZgqUu3BesaJUw/edit?usp=sharing爲什麼我無法刪除我的雪碧
import javax.swing.*;
import javax.imageio.*;
import java.io.*;
import java.awt.image.BufferedImage;
public class Sprite {
BufferedImage image;
public Sprite(BufferedImage image) throws IOException{
this.image = image;
}
public BufferedImage getSprite(){
return this.image;
}
public int getX(){
return this.image.getMinX();
}
public int getY(){
return this.image.getMinY();
}
//to spawn a sprite on top of another image.
public void spawn(JFrame frame, BufferedImage world,int x, int y) throws
IOException{
int orig_x = x;
for (int sprite_y = 0; sprite_y < this.image.getHeight(); sprite_y++){
for (int sprite_x = 0; sprite_x < this.image.getWidth(); sprite_x++){
int sprite_pixel = this.image.getRGB(sprite_x,sprite_y);
int sprite_alpha = (sprite_pixel>>24) & 0xff;
int sprite_red = (sprite_pixel>>16) & 0xff;
int sprite_green = (sprite_pixel>>8) & 0xff;
int sprite_blue = sprite_pixel & 0xff;
int pixel = (sprite_alpha<<24) | (sprite_red<<16) | (sprite_green<<8) |
sprite_blue;
world.setRGB(x,y,pixel);
x++;
}
y++;
x = orig_x;
}
}
public void erase(JFrame frame,BufferedImage world, BufferedImage
orig_world) throws IOException{
int sprite_x = this.image.getMinX();
int sprite_y = this.image.getMinY();
int orig_sprite_x = sprite_x;
for (int stepper_y = this.image.getMinY(); stepper_y <
this.image.getHeight(); stepper_y++){
for (int stepper_x = this.image.getMinX(); stepper_x <
this.image.getWidth(); stepper_x++){
int sprite_pixel = orig_world.getRGB(sprite_x,sprite_y);
//get pixel from orginal sprite
int sprite_alpha = (sprite_pixel>>24) & 0xff;
//get alpha value from original sprite
int sprite_red = (sprite_pixel>>16) & 0xff;
//get red value from original sprite
int sprite_green = (sprite_pixel>>8) & 0xff;
//get green value from original sprite
int sprite_blue = sprite_pixel & 0xff;
//get blue value from original sprite
int pixel = (sprite_alpha<<24) | (sprite_red<<16) |
(sprite_green<<8) | sprite_blue;
//set the pixel equal to the old values
world.setRGB(sprite_x,sprite_y,pixel);
//place the pixel
sprite_x++;
}
sprite_x = orig_sprite_x;
// setting equal to original is so that at the end of each row it resets
to the farthest left pixel.
sprite_y++;
}
}
public static void main(String[] args) throws IOException{
Sprite orig_world = new Sprite(ImageIO.read(new
File("C:/Users/sfiel42/Documents/game/castles.png")));
Sprite world = new Sprite(ImageIO.read(new
File("C:/Users/sfiel42/Documents/game/castles.png")));
JLabel label = new JLabel();
label.setLocation(0,0);
label.setIcon(new ImageIcon(world.getSprite()));
label.setVisible(true);
JFrame frame = new JFrame();
frame.setVisible(true);
frame.setSize(783,615);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(label);
Sprite archer = new Sprite(ImageIO.read(new
File("C:/Users/sfiel42/Documents/game/archer.png")));
archer.spawn(frame,world.getSprite(),250,400);
archer.erase(frame,world.getSprite(),orig_world.getSprite());
}
}
謝謝,這使得現在很有意義! :) –
@ScottField如果這個或任何答案已解決您的問題,請考慮[通過點擊複選標記接受它](https://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer -工作)。這向更廣泛的社區表明,您已經找到了解決方案,併爲答覆者和您自己提供了一些聲譽。沒有義務這樣做。 –