저는 다른 사람들보다 많이 고생 한 후 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 -작업). 이는 해결책을 찾았으며 응답자와 자신에게 어느 정도의 평판을 제공한다는 것을 더 넓은 커뮤니티에 나타냅니다. 이를 수행 할 의무는 없습니다. –