2012-11-26 2 views
1

그래서 저는 C# 프로그래밍에 익숙하지 않고 을 만들었습니다 그래픽을 사용하여 게임을 연결하십시오. 원이있는 눈금이 있습니다. 내가해야 할 일은 사용자가 특정 열을 클릭 할 때 칩이 아래로 움직이는 것을 보는 것이다. 타이머 등을 사용해야합니까? 또는 루프를 수행하고 매번보다 작은 yCoordinate를 지정하여 원을 아래쪽으로 움직일 수 있습니까?사용자 클릭시 원을 아래로 이동하려면 어떻게해야합니까? 4 개의 C#을 연결하십시오

또한이 원이 그리드와 겹치지 않게하는 방법이 있습니까? 마찬가지로 그리드 뒤에서 움직이는 것처럼 보이게 할 수 있습니까?

이것은 내가 지금까지 한 일입니다 ...

private int columnPosition = 0; 
    private int xCoordinate; 
    private int yCoordinate; 

    public Form1() 
    { 
     InitializeComponent(); 
    } 

    private void panel1_Paint(object sender, PaintEventArgs e) 
    { 

     Graphics g = grid.CreateGraphics(); 
     Pen pen = new Pen(Color.White, 1); 
     Pen pen2 = new Pen(Color.Black, 4); 

     for (int i = 0; i < 7; i++) 
     { 
      for (int j = 0; j < 6; j++) 
      { 
       g.DrawEllipse(pen2, new System.Drawing.Rectangle((i * 70) + 20, (j * 60) + 10, 50, 50)); 
       g.FillEllipse(pen.Brush, new System.Drawing.Rectangle((i *70) + 20, (j * 60) + 10, 50, 50)); 



      } 
     } 
    } 

    private void panel2_Paint(object sender, PaintEventArgs e) 
    { 
     Graphics g = panel2.CreateGraphics(); 
     Pen pen = new Pen(Color.Red, 5); 
     Pen pen2 = new Pen(Color.Black, 3); 

     if (columnPosition != -1) 
     { 
      g.DrawEllipse(pen2, new System.Drawing.Rectangle(columnPosition * 35 - 15, 0, 50, 50)); 
      g.FillEllipse(pen.Brush, new System.Drawing.Rectangle(columnPosition * 35 - 15, 0, 50, 50)); 

     } 

    } 

    private void panel1_MouseMove(object sender, MouseEventArgs e) 
    { 
     columnPosition = e.X/35; 
     Console.WriteLine(e.X); 
     panel2.Refresh(); 
    } 

    private void panel1_MouseLeave(object sender, EventArgs e) 
    { 
     columnPosition = -1; 
     panel2.Refresh(); 
    } 

    private void panel1_MouseClick(object sender, EventArgs e) 
    { 
      ///// THIS IS WHERE I AM STUCK 
    } 

}

내가 그리드의 이미지를 업로드하고 싶어하지만 새 사용자를 오전부터 난 못해 죄송합니다 -. - !! 어떤 도움 :)

+0

당신이 질문을 작성하는 곳에 이미지 버튼이있는 그림을 추가 할 수 있습니다. {} 기호 오른쪽에 그림이 추가되면 더 잘 도와 드리겠습니다. 편집하려면 지금 누르십시오 – Arash

답변

0

당신은 타이머를 사용할 수 있지만 당신은 또한 전체 애니메이션을 통해 각 원의 추적 할 필요가 사전에

감사합니다. 애니메이션이 계속 발생하는 동안 사용자가 다른 열을 클릭하면 어떻게됩니까? 당신은 같은 타이머를 재사용하고 싶지 않을 것입니다. 다른 타이머를 원할 것입니다.

타이머를 자주 사용하지 않는 한 원이 원활하게 흐르지 않지만 통과 한 시간만큼 올바른 금액을 이동해야합니다 (if if 컴퓨터가 과부하 상태이며 타이머를 즉시 처리 할 수 ​​없습니까?). 또한 WinForms API는 높은 재생 빈도를 처리하도록 설계되지 않았습니다 (이 목적으로 DirectX와 같은 다른 라이브러리가 개발되었습니다).

애니메이션이있는 대부분의 게임은이 모든 것을 처리하는 또 다른 방법을 사용합니다. 본질적으로 응용 프로그램은 하나의 큰 while (true) 루프가됩니다. 문자 적으로는 while(true) 일 수 있지만 게임이 실행되는 동안 루프는 계속 반복됩니다. 루프가 반복 될 때마다 게임을 그립니다. 다음에 루프를 반복 할 때 경과 한 시간을 계산 한 다음이를 사용하여 각 스프라이트 (그래픽)가 얼마나 멀리 이동해야하는지 결정한 다음 그에 따라 그리십시오. 이는 실제 애니메이션이 작동하는 방식 (예 : 극장의 영화)과 매우 유사합니다. 인간의 눈에는 움직이는 그림처럼 보입니다. 그러나 실제로는 높은 속도 (일반적으로 초당 30 ~ 60 회)로 재생되는 일련의 정지 이미지입니다.

저는 전문 게임 개발자가 아닙니다. 나는 심지어 나 자신을 "취미"라고 생각 할지도 모르겠다. 현대 게임 프로그래밍이 내가 설명한 것보다 훨씬 진화되었다고 확신하지만 기본 개념이 모두 있습니다. 비 게임 개발자 (초보자 용 안내서)에게 게임 개발을 가르치는 것을 목표로 한 책을 집어 들거나 (온라인으로 좋은 자습서를 찾는 것이 좋습니다.)

+0

도움 주셔서 감사합니다 Brian :) 당신은 타이머에 아주 좋은 점을 가지고 있습니다. 그 생각은 실제로 내 마음에 왔지만 실제로 더 좋은 방법이 있다고 생각했습니다! 다시 한 번 감사드립니다! 해결 될 때를 기억한다면 대답을 게시 할 것입니다. 아마도 다른 방법을 찾을 것입니다. 누가 알겠습니까 :) – Bernice

관련 문제