수다닷컴

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

움직이는 자동차

초시계

2023.04.01

조그만 창을 띄우고 그 안에 도형으로 자동차를 그렸습니다.
그리고 자동차가 왼쪽 끝에서부터 오른쪽끝까지 움직이고 끝에 다다르면 다시 왼쪽으로 이동하게끔 코드를 짰는데요
루프를 돌려서 repaint()함수를 이용해서 좌표를 왼쪽에서 오른쪽, 다시 오른쪽에서 왼쪽으로 이동하게했는데 루프내에서 repaint()함수가 실행이 안되네요? 쌍방향을 했을때 움직이면서 현재좌표를 출력하게끔 했더니 좌표는 계속 변하면서 출력이 되는데repaint() 함수는 실행이 안되는것 같습니다. 아예 창 자체가 뜨질 않네요. 그래서 이번엔 한쪽 으로만 움직이도록 반쪽 소스를 돌려보니 for 루프문에 다 끝나고나서야 repaint()가 한번 실행되는것 같습니다.
어떻게해야 좌우로 움직이는 자동차 를 제대로 구현할 수 있을까요? ===================================================================
import java.awt.*;
import javax.swing.*;
import java.util.Calendar;

public class RacingCar extends JFrame{

private CarPanel c = new CarPanel();
public RacingCar(){
add(c);
while(true){
if(c.getCurrentX()==0){
for(int i=c.getCurrentX(); i295; i++){
//time-delay
delay(500);
c.setCurrentX(i);
c.repaint();

System.out.println(c.getCurrentX());
}//end for-loop
}
else{
for(int i=c.getCurrentX(); i=0; i--){
//time-delay
delay(500);
c.setCurrentX(i);
c.repaint();
System.out.println(c.getCurrentX());
}//end for-loop
}
}//end while
}//end RacingCar()

public void delay(int delay_time){
Calendar time = Calendar.getInstance();

double currentTime = time.getTimeInMillis();
currentTime+= delay_time;

while(true)
{
if(currentTime=time.getTimeInMillis())break;
time = Calendar.getInstance();
}

}
public static void main(String[] ar){
JFrame frame = new RacingCar();

frame.setTitle(Exercise 16_15);
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(EXIT_ON_CLOSE);
frame.setSize(350, 200);
frame.setVisible(true);
frame.setResizable(false);

}//end main()

static class CarPanel extends JPanel{
private int currentX=0, currentY=170 ;
private int[] topOfCarX = new int[]{currentX+10, currentX+20, currentX+30, currentX+40};
private int[] topOfCarY = new int[]{currentY-20, currentY-30, currentY-30, currentY-20};

protected void paintComponent(Graphics g){
super.paintComponent(g);
g.setColor(Color.blue);
g.fillRect(currentX, currentY-20, 50, 10);
g.setColor(Color.black);
g.fillOval(currentX+10, currentY-10, 10, 10);
g.fillOval(currentX+30, currentY-10, 10, 10);
g.setColor(Color.red);
g.fillPolygon(topOfCarX, topOfCarY, 4);

}
public void setCurrentX(int i){
this.currentX = i;
this.topOfCarX = new int[]{i+10, i+20, i+30, i+40};
}
public int getCurrentX(){
return this.currentX;
}

}
}

==============================================================================

신청하기





COMMENT

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

  • 분홍이

    조언감사합니다 ^^

  • 상큼한캔디

    생성자는 객체를 만드는것 또는 객체를 생성하는것 , 객체를 초기화시키는것 이라고 아주 간단하게 이해하기 쉽게 말할수 있습니다. 생성자에서 루프를 돌리시는 것보다는 매소드를 만드셔서 그 안에서 루프를 돌리시는게 더 좋은것 같습니다. 또한 main에서 부르시게 되면 RacingCar 객체를 생성하시고 매소드를 호출하시는 형식으로 하시는게 더 좋은것 같습니다...ㅎㅎ

  • 가람

    아....성공했습니다...!! ^^헌데 새로운 질문이 생겼습니다...RacingCar() constructor 내의 소스를 main 함수안으로 옮겨넣고(옮겨넣으면서 생기는 잡다한 에러해결) RacingCar() constructor 는 아예 없애버렸습니다. 그러니까 아무 문제없이 잘 실행되네요. 왜 constructor내에 소스를 넣어놓고 constructor를 불렀을때는 루프내에서 repaint()가 되지 않은건지 모르겠습니다.

번호 제 목 글쓴이 날짜
2701397 세로 100% 푸터부분이 바닥에 안붙어요(세로 100% 되는 소스를 썼거든요) 꽃겨울 2025-07-13
2701369 [긴급]로드해온 swf가 갑자기 사라지는 현상..(익스10) (2) 곰돌이 2025-07-13
2701340 [c++]학교 과제 질문이요...... (3) 기쁨해 2025-07-13
2701311 구글 뉴스검색최적화 작업은 누구의 영역인가요? 많은 조언 부탁드려요! 리나 2025-07-13
2701285 아이폰이나 안드로이드 폰 인터넷으로 볼때 배꽃 2025-07-12
2701230 테마 설정하면 밑에 뜨는 글 삭제 (1) 창의적 2025-07-12
2701177 css적용이 안되요~ (6) 다니엘 2025-07-11
2701151 사이트작업시 inputbox 가 readonly 형태표시 어떻게 하시나요? (1) 찬내 2025-07-11
2701123 간단한 select 질문입니다 (3) 천사의눈물 2025-07-11
2701061 비베질문.. 똘끼 2025-07-10
2701034 메일폼 내 script 삽입가능한 방법 없을까요.. (2) 마음새 2025-07-10
2701008 분명히 버튼을 만들었는데 액션이 안걸립니다. (3) 재찬 2025-07-10
2700923 전체중앙정렬&독타입&쿼크모드 ㅜㅠ (8) 푸른들 2025-07-09
2700893 질문드리겠습니다. 도도한 2025-07-09
2700793 무비클립에 마우스 오버시 랜덤으로 효과음 나기는 어떻게 ;; (1) 바닐라 2025-07-08
2700741 웹전송? (2) 연와인 2025-07-07
2700686 카테고리 호버시 세부카테고리 보이게하는 것, css로만 가능할까요?? (3) 다힘 2025-07-07
2700658 메타태그 질문드립니다..ㅠㅠ;;; 모해 2025-07-07
2700632 외부에서 이미지 파일을 불러와야 합니다. 도와주세요. (4) 에일린 2025-07-06
2700579 (air + as3) smtp 이용해서 첨부파일 포함해서 메일 보내기 물보라 2025-07-06
<<  이전  1 2 3 4 5 6 7 8 9 10  다음  >>

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