수다닷컴

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

원과 네모에 움직임을 줄때 깜빡임 현상

빛솔

2023.04.01



현재 탁구게임을 만들고 있으며, 키바(공을 쳐낼) 2개와 공 1개를 생성하여 작업하고 있습니다.
키바 한개는 컴터가 움직이는 걸로 받아들이기 위해 공의 y좌표와 같습니다.

import java.awt.*;
import java.awt.event.*;
import javax.swing.jpanel;
class frameevent extends frame implements keylistener{
label info;
int x = 40;int y = 50;
int x1 = 350; int y1 = 50;
int x2 = 100; int y2 = 50;

public frameevent(){//생성자
info =new label();
add(south, info);

addkeylistener(this);

setsize(400,400);
setvisible(true);

addwindowlistener(new windowadapter(){
public void windowclosing(windowevent e){
dispose();
system.exit(0);
}
});
play();
}//생성자 끝
public void paint(graphics g){
g.setcolor(color.red);
g.fillrect(x, y, 20, 50);
g.setcolor(color.blue);
g.fillrect(x1, y1, 20, 50);
g.setcolor(color.gray);
g.filloval(x2, y2,20,20);
}
public void play(){

if(x2100){
for (int i =0;x20 ;i++ ){
x2--;
y2++;
repaint();

try{ //예외상황을 처리하기 위한 검사후 처리
thread.sleep(20); //스레드를 일정시간 동안 대기상태로 둔다.
}catch(exception ex){} //예외처리 끝
}
}
boolean xway = true; //boolean 참과 거짓을 나타내는 자료형
boolean yway = false;
boolean x2way = true; //boolean 참과 거짓을 나타내는 자료형
boolean y2way = false;
while(true) {
{
double diffx = ((x2 - x) = 0) ? (x2 - x) : (x - x2);
double diffy = ((y2 - y) = 0) ? (y2 - y) : (y - y2);
double diffx1 = ((x1 - x2) = 0)? (x1 - x2):(x2 - x1);
double diffy1 = ((y1 - y2) = 0)? (y1 - y2):(y2 - y1);

double squarediffx = diffx*diffx;
double squarediffy = diffy*diffy;
double squarediffx1 = diffx1*diffx1;
double squarediffy1 = diffy1*diffy1;
double distance = math.sqrt(squarediffx+squarediffy);
double distance1 = math.sqrt(squarediffx1+squarediffy1);
y =y2;
if(distanc(distance = 20) {
x2way = ((x2way == true) ? false : true);
y2way = ((y2way == true) ? false : true);
}
if(distance1 = 20){
xway = (xway == true) ? false :true;
yway = (yway == true) ? false :true;
}

}

x2way = (x2 = 60)? true :((x2 = 330)? false: x2way);
y2way = (y2 = 30)? true :((y2 = 300)? false: y2way);

x2 += (x2way == true) ? 1 : (-1);
y2 += (y2way == true) ? 1 : (-1);

repaint(); //repaint()메서드를 호출해야 paint 메서드가 호출

try{ //예외처리 검사후 처리
thread.sleep(20); //스레드를 일정시간 동안 대기상태로 둔다.
}catch(exception ex){} //예외처리 끝
}
}

public void keypressed(keyevent e){
if(e.getkeycode() == keyevent.vk_w){
y -= 10;
repaint();
}
if(e.getkeycode() == keyevent.vk_s){
y += 10;
repaint();
}
if(e.getkeycode() == keyevent.vk_up){
y1 -= 10;
repaint();
}
if(e.getkeycode() == keyevent.vk_down){
y1 += 10;
repaint();
}
}
public void keyreleased(keyevent e){
}
public void keytyped(keyevent e){
}
}//frameevent 클래스 끝
class pong1{
public static void main(string args[]){
new frameevent();
}
}
질문1공과, 키바가 쓰레드를 이용하고 있는데, 깜박임 현상이 심하게 보입니다.
키바만 생성해서 위아래 키이벤트로 작성했을때만 해도 안그랬었는데, 쓰레드의속도를 조절해봐도
100, 50.20 이런식으로 쓰레드값을 바꿔보아도 깜빡임이 심합니다.

질문2

공이 대각선으로 벽에 부딪쳐서 팅겨나가고 있는데요.
오른쪽 키바는 키보드로 입력하여 쳐내거나 , 치지 못하면 공이 사라지게 하려고 합니다.
그렇다면, 공의 움직임중에 대각선으로 오른쪽으로 움직이는 움직임을 사라지게 해야하는것인지,
공과 키바의 두점의 거리를 공식으로 구해서 그 거리가 20일때 부딪히면 튕겨라, 아니면 사라져라라는
제가 생각한 알고리즘이 맞는것인지 조언 부탁드립니다.
(연습장에 계속 그림과 알고리즘을 짜고 있는데 처음이라 많이 서투룹니다 ;; )

신청하기





COMMENT

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

  • 갤2

    오랜만에 더블 버퍼링을 들어보는군요...
    위의 버섯수다님말씀처럼 메모리에 그림을 그려놓은 뒤에 한번에 화면에 출력하는 방법(?)이면 깜빡임(flickering)은 해결되겠죠..

  • 봄나

    옙! 글씨체는 보니 좋지 않았습니다. 바꿨습니다 ^_^
    답글에 정신이 화들짝 들고 확실히 잘 알겠습니다 고맙습니다

  • 진나

    흠.. 글꼴이 좋은면도 있지만...
    일반적으로 프로그래머한테는 프로그래머용 글꼴이 아닌 이상은..
    보기 불편하기때문에 표준 글꼴을 이용하시는게 좋습니다.
    특히나 질문자님의 경우 사용하는 글골은 비추라고 생각되는군요.
    질문 올리신뒤에 소스 보셨다면 이상한 그림들이 많이 보일것입니다.

    1. 깜빡임 문제는..
    대충 소스를 훑어보시니 버퍼링 개념이 전혀 없군요.
    버퍼링은 게임 구현시 기본입니다.
    쓰레드가 문제가 아니라 더블 버퍼링을 하셔야하니
    인터넷에서 더블

번호 제 목 글쓴이 날짜
2695905 ASP로 개발됐을 때 css가 달라져요 ㅠㅠ (4) 슬아라 2025-05-24
2695878 form을 이용한 다른 페이지로 넘기는 방법을 알려주세요 (1) 핫파랑 2025-05-24
2695844 저기 암호화 및 복호화 프로그램.. 만들어볼려는대 (2) 한빛 2025-05-24
2695814 [질문] PDA에서 애플릿이 가능한가요? (1) 봄시내 2025-05-24
2695785 웹 설정 도와줄분 화이트캣 2025-05-23
2695730 갑자기 기억이 안나는데 accesskey 속성.. 빛나라 2025-05-23
2695702 [질문] Java 버전 차이에 의한 오류?!! (2) 검사 2025-05-23
2695672 자바 임베디드 쪽으로 배우고 싶은데요..질문이요.. (1) 뽀그리 2025-05-22
2695647 헉! 이클립스(v3.1)에서 발생되는 널포인트 익셉션? ;;; (3) 아빠몬 2025-05-22
2695586 IFRAME 캐싱 질문 봄나비 2025-05-22
2695498 [질문]실행가능한 jar파일.. 정말 이해가 안가네요... ㅡㅜ;; 터1프한렩 2025-05-21
2695468 자바랑 이클립스에서요.. 스킬 2025-05-21
2695375 Mysql 연동하는 자바 질문있습니다. 아리솔 2025-05-20
2695319 파워포인트 파일을 저장할 수 있을까요? 시윤 2025-05-19
2695289 [질문]Tween 값의 정도를 알고 싶습니다. 타마 2025-05-19
2695238 c 와 c++의 시작 (10) ChocoHoilc 2025-05-18
2695215 탑메뉴의 repeat-x .배경이 두가지에요ㅠ ㅠ 널위해 2025-05-18
2695187 자바스크립트와 자바의 import에 관해서 질문드려요 (1) 무슬 2025-05-18
2695116 테마 문의 (해당 사이트와 같은 테마 혹은 플러그인) Sweet 2025-05-17
2695084 [질문] starDrag()와 같은 함수 만들기 민구 2025-05-17
<<  이전  1 2 3 4 5 6 7 8 9 10  다음  >>

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