수다닷컴

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

더블 버퍼링을 이용하여 그래픽을 출력중 이상현상

꽃짱아

2023.04.01




import java.util.*;
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
class main
{
ballcanvas can;
main()
{
jframe jf = new jframe(피하자!);
jpanel p1= new jpanel();
can = new ballcanvas(this);

p1.add(can);
can.addkeylistener(new moveproc(can));
jf.addwindowlistener(new windowproc());

p1.setbackground(color.black);

jf.add(p1);

jf.setsize(400,600);
jf.setvisible(true);

//jf.setresizable(false);
}
public static void main(string[] args)
{
new main();
}
}
////////////////////////////////////////////////////////////
class ballcanvas extends canvas
{
int[]x = new int[100];
int[]y = new int[100];
int[]skipx = new int[100];
int[]skipy = new int[100];
int ux = 350;
int uy = 500;
main main;
ballthreadt;
uthread u;
color[]color = new color[100];
randomrand = new random();
image imgu,imgm;
ballcanvas(main main)
{
this.main=main;
imgm = toolkit.getdefaulttoolkit().getimage(imgm.gif);
imgu = toolkit.getdefaulttoolkit().getimage(imgu.gif);
//이 클래스는 시작하는 순간 공의 좌표와 색상을 지정하자.
for(int i = 0; i 100; i++)
{
x[i] = rand.nextint(400);
y[i] = rand.nextint(600);
inttempx = rand.nextint(10);
if(tempx % 5 == 0)
{
skipx[i] = 0;
}
if(tempx % 5 == 1)
{
skipx[i] = 1;
}
if(tempx % 5 == 2)
{
skipx[i] = 2;
}
if(tempx % 5 == 3)
{
skipx[i] = 3;
}
if(tempx % 5 == 4)
{
skipx[i] = 4;
}
int tempy = rand.nextint(10);
if(tempy % 5 == 0)
{
skipy[i] = 1;
}
if(tempy % 5 == 1)
{
skipy[i] = 2;
}
if(tempy % 5 == 2)
{
skipy[i] = 3;
}
if(tempy % 5 == 3)
{
skipy[i] = 4;
}
if(tempy % 5 == 4)
{
skipy[i] = 5;
}
color[i] = new color(rand.nextint(256), rand.nextint(256), rand.nextint(256));
}
t = new ballthread(this);
u=new uthread(this);
u.start();
t.start();

}
//더블 버퍼링 부분
graphics tempg;
image tempi;
int xpos;
int ypos;
public void tempgraphics(){
xpos=getwidth();
ypos=getheight();
tempi=createimage(xpos,ypos);
tempg=tempi.getgraphics();
}
public void update(graphics g){
if(tempg == null)
tempgraphics();viewpaint(g);
}
public void paint(graphics g)
{
g.clearrect(0, 0, 400, 600);
for(int i = 0; i 100; i++)
{
g.drawimage (imgm, x[i] + 5, y[i] + 5, this);
}
g.drawimage (imgu, ux+5 , uy+10, this);

}

public void viewpaint(graphics g){
paint(tempg);

g.drawimage(tempi,0,0,this);
}

public dimension getpreferredsize()
{
return new dimension(400, 600);
}
}
////////////////////////////////////////////////////////////////
class ballthread extends thread
{
boolean flag=false;
ballcanvasmain;
ballthread(ballcanvas temp)
{
main = temp;
}
public void run()
{
while(true)
{
if(flag)
continue;

for(int i = 0; i 100; i++)
{
main.x[i] = main.x[i] + main.skipx[i];
main.y[i] = main.y[i] + main.skipy[i];
}
main.repaint();
for(int i = 0; i 100; i++)
{
//만약 벽에 도착하면 방향을 바꿔주어야 한다.
if(main.x[i] = 0 || main.x[i] = 400)
{
main.skipx[i] = -main.skipx[i];
}
if(main.y[i] = 0 || main.y[i] = 600)
{
main.y[i] = 1;
}
}
try
{
thread.sleep(50);

}
catch(exception e)
{}
}
}
}
///////////////////////////////////////////////////////////////////
class moveproc extends keyadapter
{
ballcanvasmain;
//moveproc(){}
moveproc(ballcanvas temp)
{
main = temp;
}
public void keypressed(keyevent e)
{

int key=e.getkeycode();

if (key == keyevent.vk_right)
{
if ( main.ux == 380)
{}
else
{
main.ux = main.ux + 5;
}
}
else if (key == keyevent.vk_left)
{
if (main.ux == 20)
{}
else
{
main.ux = main.ux - 5;
system.out.println(움직여);
}
}
else if (key == keyevent.vk_up)
{
if (main.uy == 20)
{}
else
{
main.uy = main.uy - 5;
};}
}
else if (key == keyevent.vk_down)
{
if (main.uy == 520)
{}
else
{
main.uy = main.uy + 5;
}
}
main.repaint();

}
}
/////////////////////////////////////////////
class uthread extends thread
{
boolean life=true;
ballcanvasmain;
uthread(ballcanvas temp)
{
main = temp;
}
public void run()
{
while(true){
if (life == true)
{
try
{
thread.sleep(50);
}
catch(exception e)
{
system.out.println(e);
}

for (int i = 0; i100 ;i++ )
{
if (( main.ux = (main.x[i]-6))
&& (main.ux =(main.x[i]+6)))
{
if (( main.uy = (main.y[i]-10))
&& (main.uy =(main.y[i]+10)))
{
//life = false;
try
{
system.out.println(부딛침);
//thread.yield();
//main.t.flag=true;
//main.u.yield();
}
catch (exception e)
{
system.out.println(e);
}

}
}
}
}
else
{
//thread.yield();
}
}
}
}

//////////////////////////////////////////////
class windowproc extends windowadapter
{
public void windowclosing (windowevent e)
{
system.exit(0);
}
}



주제는 공피하기입니다만,

위 소스 코드에서 더블 버퍼링부분을 처리하였습니다.
확실이 깜빡임 현상이 없어 지긴했지만 이상한 현상이 발생하였습니다.아래 사진처럼 특정 부분만 계속 깜박이는 현상이 일어납니다.
보시는 봐와 같이 아래 부분과 같은 부분이 그려지는거 같은데 원인을 못찾겠습니다..

왜이러한 현상이 일어나는 걸까요?... 힌트좀 주세요...

신청하기





COMMENT

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

번호 제 목 글쓴이 날짜
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
2694035 작업관리자 창에.. CPU사용 현황처럼 만들고 싶습니다. (1) 다올 2025-05-07
2694004 Linux에서 java사용 (2) 한빛 2025-05-07
2693978 CS5.5 베타 버젼이라도 다운받을 수 있는 사이트 아세요? (4) 콩순 2025-05-07
2693922 프로그램 시간을 측정하는 클래스나 매써드.. (3) 꽃짱구 2025-05-06
2693893 데이터베이스 이벤트시 hook 이 있을까요? 루나 2025-05-06
2693835 배경으로 동영상 넣는 방법좀 알려주세용 다미 2025-05-05
2693779 [중국어 폰트 깨짐] Applet Chart 에서 중국어 깨짐 현상.. (2) 박애교 2025-05-05
<<  이전  1 2 3 4 5 6 7 8 9 10  다음  >>

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