방향조작중 배경이미지내에서 움직일때 배경밖으로 나가지 못하게 할려면 어떻게...
은솜
안녕 하세요 거의 매일 질문하네요 ㅠㅠ
정말 죄송합니다 ㅠㅠ
그럼에도 불구하고 또 질문입니다...
문제는 일단 키 하나만 눌러줬을때는 배경 밖으로 나가지못합니다...
하지만 업키랑 머 렙트키 아님 업 & 라이트 키등을 대각선으로 갈려고
눌러주면 거진 동시에 누르면 배경밖으로 나가지안거든요 근데
따닥 눌러주면 일단 먼저눌린 키의 조건은 무시하고 나중눌린 키의 조건만
실행하고 지나가버리는데요...그럼 여기서 어떤현상이 일어나냐면요
렙트누르고업을누르면 업의조건은 실행되서 위쪽의로 는 더이상 못나갑니다...
하지만 먼저 누른 렙트 조건은 무시되어서 배경 밖으로 나가게 되는데요?
어떻게 고쳐야 할까요???ㅠㅠ 소스는....
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;
번호 | 제 목 | 글쓴이 | 날짜 |
---|---|---|---|
2655352 | 동영상 플래이어 (2) | 머슴밥 | 2024-05-19 |
2655320 | GList를 사용하는데 에러가 발생합니다. 도와주세요~~ | 찬늘봄 | 2024-05-18 |
2655291 | 자바 초보입문했는데요~~ | 이퓨리한나 | 2024-05-18 |
2655235 | xml연동 갤러리 생성관련 질문입니다. (2) | 난새 | 2024-05-18 |
2655205 | C++ 포인터 if | WatchOut | 2024-05-17 |
2655150 | 모바일 웹 환경을 구축을 할때의 콘텐츠 이미지 사이즈 (2) | 레오 | 2024-05-17 |
2655122 | 엥;; getMonth() 왜이렇게 나타나죠? (6) | 초코맛캔디 | 2024-05-17 |
2655095 | 구구단 질문이요 (3) | 하예진 | 2024-05-16 |
2655064 | RSA.js 파일 구할 수 있을가요.. 있으신분 첨부좀 해주세요.. | 얀 | 2024-05-16 |
2655009 | 유료테마 사려고 하는데 데모파일이 없다면 | 에드가 | 2024-05-16 |
2654980 | cximage를 통해 jpg파일을 받아와 윈도우에 뿌리는 프로그램을 만드는중인데 꼬였습니다. (4) | 하린 | 2024-05-15 |
2654922 | 고도몰 3차 4차 이상 카테고리 표출되게.. (7) | 유메 | 2024-05-15 |
2654874 | 제이쿼리랑 자바스크립트 학원 추천좀부탁드릴게요 (7) | 향율 | 2024-05-14 |
2654843 | 탭버튼 코딩시 마우스오버가 접근성에 왜 어긋나는지 궁금합니다... (1) | 걸때 | 2024-05-14 |
2654814 | 중국어 인코딩 관련해서 질문요,,, (5) | 화이트캣 | 2024-05-14 |
2654783 | 이 알고리즘 한줄한줄 해석좀 부탁드립니다. (1) | 요루 | 2024-05-14 |
2654764 | t 탭 질문이여. (3) | 눈 | 2024-05-13 |
2654737 | 크롬 인쇄하기 오류 (멈춤현상) | 아라 | 2024-05-13 |
2654708 | ie6에서 margin 문제 (5) | 너만 | 2024-05-13 |
2654681 | 아까 올렸던 질문의 액션코딩 (3) | 큰꽃들 | 2024-05-13 |