방향조작중 배경이미지내에서 움직일때 배경밖으로 나가지 못하게 할려면 어떻게...
은솜
안녕 하세요 거의 매일 질문하네요 ㅠㅠ
정말 죄송합니다 ㅠㅠ
그럼에도 불구하고 또 질문입니다...
문제는 일단 키 하나만 눌러줬을때는 배경 밖으로 나가지못합니다...
하지만 업키랑 머 렙트키 아님 업 & 라이트 키등을 대각선으로 갈려고
눌러주면 거진 동시에 누르면 배경밖으로 나가지안거든요 근데
따닥 눌러주면 일단 먼저눌린 키의 조건은 무시하고 나중눌린 키의 조건만
실행하고 지나가버리는데요...그럼 여기서 어떤현상이 일어나냐면요
렙트누르고업을누르면 업의조건은 실행되서 위쪽의로 는 더이상 못나갑니다...
하지만 먼저 누른 렙트 조건은 무시되어서 배경 밖으로 나가게 되는데요?
어떻게 고쳐야 할까요???ㅠㅠ 소스는....
package image;
import java.awt.*;
import java.awt.event.*;
import java.applet.*;
import java.awt.image.*;
import java.awt.*;
class aaa{
private int x,y;
public aaa(){
setX(200);
setY(100);
}
public void setX(int nx){
x=x+nx;
}
public void setY(int ny){
y=y+ny;
}
public int getX(){return x;}
public int getY(){return y;}
}
public class image extends Frame implements Runnable,KeyListener {
int index = 0; // 현재 그려질 이미지의 인덱스
public static final int IMAGE_MAX = 35;
boolean x1=false,x2=false,x3 = false,x4 = false;
Image imageFrames[] = null; // 이미지 프레임
Image air;
Image offImage = null; // 오프-스크린 이미지
Graphics offGraphics = null; // 오프-스크린 이미지에 대한 그래픽스 객체
Insets insets = null; // 프레임의 테두리 영역을 나타내는 Insets 객체
aaa move = new aaa();
Dimension dim = new Dimension(640,480);
public image() {
addKeyListener(this);
// 디폴트 툴킷 객체를 얻고, 미디어 트랙커 객체를 생성합니다.
Toolkit toolkit = Toolkit.getDefaultToolkit();
MediaTracker tracker = new MediaTracker(this);
// 이미지 프레임을 저장하기 위한 Image 배열 객체 생성합니다.
imageFrames = new Image[IMAGE_MAX];
for (int i = 0; i imageFrames.length; i++) {
// 이미지 파일로부터 이미지 객체를 생성합니다.
imageFrames[i] = toolkit
.createImage(C:\\Documents and Settings\\pc4\\바탕 화면\\java\\image\\src\\image\\aa-
+ (i) + .jpg);
// 미디어 트랙커에 이미지 객체를 등록합니다.
tracker.addImage(imageFrames[i], 0);
}
air = toolkit.createImage(C:\\Documents and Settings\\pc4\\바탕 화면\\java\\image\\src\\image\\f15.gif);
// 모든 이미지가 로딩될 때까지 기다립니다.
tracker.addImage(air, 0);
try {
tracker.waitForAll();
} catch (InterruptedException e) {
e.printStackTrace();
System.exit(0);
}
}
// 이미지 프레임의 이미지를 하나씩 순서대로 보여주기 위한 스레드의 바디입니다.
public void run() {
while (true) {
// 다음 보여줄 이미지의 인덱스로 조정합니다.
if (index (imageFrames.length-1)) {
index++;
} else {
index = 0;
}
// 새롭게 설정된 인덱스에 해당하는 이미지를 보여주기 위해
// repaint() 메소드를 호출합니다.
repaint();
// 애니메이션의 딜레이를 조정합니다.
try {
Thread.sleep(10);
} catch (InterruptedException e) {
break;
}
}
}
// 컴포넌트의 바탕색으로 지우고 나서
// paint() 메소드를 호출하는 것 때문에 깜빡임 현상이 발생할 수 있는데,
// 다음과/ 다음과 같이 update() 메소드에서 paint() 메소드를 직접 호출하도록
// 재정의함으로써 깜빡임 현상을 제거할 수 있습니다.
public void update(Graphics g) {
paint(g);
}
public void paint(Graphics g) {
// 프레임의 테두리를 고려하며 이미지를 그려주어야 합니다.
// 그렇지 않을 경우, 이미지가 테두리에 의해 잘려 보일 것입니다.
if (offImage == null) {
int width = imageFrames[0].getWidth(this);
int height = imageFrames[0].getHeight(this);
// 오프-스크린 이미지를 생성하고 그래픽스 객체를 얻습니다.
offImage = createImage(width, height);
offGraphics = offImage.getGraphics();
}
// 오프-스크린 이미지에 그래픽 작업을 수행
offGraphics.setColor(getBackground());
offGraphics.fillRect(0, 0, getWidth(), getHeight());
// 프레임의 테두리를 고려하여,
// 프레임 내에서 실제 보여지는 영역에 이미지를 그려줍니다.
offGraphics.drawImage(imageFrames[index], 0, 0, this);
offGraphics.drawImage(air, move.getX(), move.getY(), this);
// 오프-스크린 이미지를 화면상에 그려줍니다.
g.drawImage(offImage, 10, 40 , this);
}
public static void main(String args[]) {
image f = new image();
f.setSize(800, 300);
f.move(100, 100);
f.setVisible(true);
f.requestFocus();
// Runnable 객체를 이용하여 Thread 객체를 생성하고,
// 이 Thread 객체를 시작시킵니다.
Thread anim = new Thread(f);
anim.start();
}
public void keyPressed(KeyEvent ke) {
if(ke.getKeyCode()==KeyEvent.VK_LEFT){
x1 = true;
if(move.getX()=0){
x1 = false;
move.setX(0);
}
}
if (ke.getKeyCode()==KeyEvent.VK_RIGHT){
x2 = true;
if(move.getX()=700){
x2 = false;
}
}
if(ke.getKeyCode()==KeyEvent.VK_UP){
x3 = true;
if(move.getY()=0){
x3 = false;
}
}
if(ke.getKeyCode()==KeyEvent.VK_DOWN){
x4 = true;
if(move.getY()=200){
x4 = false;
}
}
if(x1){ //왼쪽 방향키 눌렀을때
move.setX(-25);
System.out.println(move.getX());
}
if(x2){ //오른쪽키 눌렀을때
move.setX(25);
System.out.println(move.getX());
}
if(x3){ // 업 방향키를 누르면
move.setY(-25);
System.out.println(move.getY());
}
if(x4){ // 다운 방향키를 누르면
move.setY(25);
System.out.println(move.getY());
}
}
public void keyReleased(KeyEvent ke) {
if(ke.getKeyCode()==KeyEvent.VK_LEFT){
x1 = false;
}
if (ke.getKeyCode()==KeyEvent.VK_RIGHT){ //오른쪽키 눌렀을때
x2 = false;
}
if(ke.getKeyCode()==KeyEvent.VK_UP){ // 업 방향키를 누르면
x3 = false;
}
if(ke.getKeyCode()==KeyEvent.VK_DOWN){ // 다운 방향키를 누르면
x4 = false;
}
}
public void keyTyped(KeyEvent e) {
throw new UnsupportedOperationException(Not supported yet.);
}
}
이것입니다....
-
가을c
감사합니다 ^^ 수다님 덕분에 잘 해결 했어요 ^^
-
물보라
그거는 말이죠 옆에 있는 사람한테 물어 보세요
-
슬찬
if(ke.getKeyCode()==KeyEvent.VK_LEFT){
x1 = true;
if(move.getX()=0){
x1 = false;
move.setX(0);
}
}
if (ke.getKeyCode()==KeyEvent.VK_RIGHT){
x2 = true;