수다닷컴

  • 해외여행
    • 괌
    • 태국
    • 유럽
    • 일본
    • 필리핀
    • 미국
    • 중국
    • 기타여행
    • 싱가폴
  • 건강
    • 다이어트
    • 당뇨
    • 헬스
    • 건강음식
    • 건강기타
  • 컴퓨터
    • 프로그램 개발일반
    • C언어
    • 비주얼베이직
  • 결혼생활
    • 출산/육아
    • 결혼준비
    • 엄마이야기방
  • 일상생활
    • 면접
    • 취업
    • 진로선택
  • 교육
    • 교육일반
    • 아이교육
    • 토익
    • 해외연수
    • 영어
  • 취미생활
    • 음악
    • 자전거
    • 수영
    • 바이크
    • 축구
  • 기타
    • 강아지
    • 제주도여행
    • 국내여행
    • 기타일상
    • 애플
    • 휴대폰관련
  • 프로그램 개발일반
  • C언어
  • 비주얼베이직

방향조작중 배경이미지내에서 움직일때 배경밖으로 나가지 못하게 할려면 어떻게...

은솜

2023.04.01

안녕 하세요 거의 매일 질문하네요 ㅠㅠ

정말 죄송합니다 ㅠㅠ

그럼에도 불구하고 또 질문입니다...

문제는 일단 키 하나만 눌러줬을때는 배경 밖으로 나가지못합니다...

하지만 업키랑 머 렙트키 아님 업 & 라이트 키등을 대각선으로 갈려고

눌러주면 거진 동시에 누르면 배경밖으로 나가지안거든요 근데

따닥 눌러주면 일단 먼저눌린 키의 조건은 무시하고 나중눌린 키의 조건만

실행하고 지나가버리는데요...그럼 여기서 어떤현상이 일어나냐면요

렙트누르고업을누르면 업의조건은 실행되서 위쪽의로 는 더이상 못나갑니다...

하지만 먼저 누른 렙트 조건은 무시되어서 배경 밖으로 나가게 되는데요?

어떻게 고쳐야 할까요???ㅠㅠ 소스는....

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.);
}
}

이것입니다....

신청하기





COMMENT

댓글을 입력해주세요. 비속어와 욕설은 삼가해주세요.

  • 가을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;

번호 제 목 글쓴이 날짜
2694724 코딩시 폰트 문제; ㅠ 후력 2025-05-13
2694696 텍스트박스 입력에 관한 문제입니다. 딥공감 2025-05-13
2694668 [질문] 페이퍼비전 PointLight 관련 질문 드려요.. 두바다찬솔 2025-05-13
2694611 Flash Lite 2.1에서 BitmapData와 Matrix 지원안하나요? (3) 이플 2025-05-12
2694582 IE & 파이어폭스 (2) 흙이랑 2025-05-12
2694553 무비클립안의 duplicate 발동이 안돼네요; 딥보라 2025-05-12
2694523 자바 애플릿 질문좀 ^^ (6) 동이 2025-05-12
2694494 [질문] JAVA 또는 C++ 로 프로그램 개발시.. 레지스터리 등록 관련 의문점? (3) 우람늘 2025-05-11
2694469 익스6에서 css버그 나오는것 해결방법좀요 !!!! (6) 원술 2025-05-11
2694442 로컬에선 잘 나오는데 운영에 반영하면 이상하게 나와요. (8) 목화 2025-05-11
2694412 [질문] 이미지 로딩후 사이즈 조절할때 (1) 아담 2025-05-11
2694391 설치형 블로그 쓰시는 분들 어떤거 쓰세요?? (7) AngelsTears 2025-05-10
2694362 Microsoft SQL Server에서 서버만드는법 어둠 2025-05-10
2694333 for문으로 돌린 이름의 제어 (4) 레이 2025-05-10
2694308 이미지 css 도와주세요 ㅠㅠ (2) 애기 2025-05-10
2694223 [급질문]스크롤스파이의 offset값 진나 2025-05-09
2694195 li에 이미지 넣고 세로로 메뉴 구성하는 경우 (1) 예님 2025-05-09
2694167 canvas 질문요. (4) 찬늘봄 2025-05-08
2694136 왜 이렇게 나오는지 이해가 잘 가지 않네요. 부탁드리겠습니다... (2) 세련 2025-05-08
2694111 div , css 공부하고있는데요 잘모르겠어요.. 도와주세요 ㅠ_ㅠ (10) 모람 2025-05-08
<<  이전  1 2 3 4 5 6 7 8 9 10  다음  >>

수다닷컴 | 여러분과 함께하는 수다토크 커뮤니티 수다닷컴에 오신것을 환영합니다.
사업자등록번호 : 117-07-92748 상호 : 진달래여행사 대표자 : 명현재 서울시 강서구 방화동 890번지 푸르지오 107동 306호
copyright 2011 게시글 삭제 및 기타 문의 : clairacademy@naver.com