2017-01-07 1 views
0

2D 마리오 스타일 게임을 만들려고합니다. 내가 시작하기 전까지는 모든 것이 '객관적'이였습니다. 마리오는 창문 끝에서 멈추지 않습니다. 심판없이 방법을 만들면 마리오도 멈추지 않습니다.C# 방법으로 심 볼을 사용하는 간단한 2D 게임에서 콜리 전이 없음

마리오 클래스

class Mario: System.Windows.Forms.PictureBox 
{ 
    public Mario(int x, int y) 
    { 
     Image = Image.FromFile("Mario.png"); 
     Location = new Point(x, y); 
     Size = new Size(16, 32); 
     SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom; 
     TabIndex = 0; 
     TabStop = false; 
    } 
public void colision(System.Windows.Forms.Panel s,ref bool l, ref bool r) 
    { 
     if (this.Right > s.Right) { r = false; } 

     if (this.Left < s.Left) { l = false; } 
    } 

} 

Main 클래스 - Form1에

public partial class Form1 : Form 
{ 

    bool right=false,left=false; 

public Form1() 
    { 
     InitializeComponent(); 
     player.Top = screen.Height - player.Height; 
    } 

    private void timer1_Tick(object sender, EventArgs e) 
    { 
     if(right== true) { player.Left += 1; } 
     if (left == true) { player.Left -=1; } 

     player.colision(screen, ref left, ref right); 
} 

화면이 System.Windows.Forms.Panel이며, 플레이어는 Form1.designer.cs입니다 초기화 된 마리오 유형입니다

관련없는 필드와 메소드를 삭제했습니다.

+0

왜이 태그 [태그입니다 :

if (this.Right > s.Width) { r = false; } if (this.Left < 0) { l = false; } 

당신은 이미 (Height 대신 Bottom의 사용) 수직 위치에 옳은 일을했다의 Graphics2D ]? – devRicher

+1

디버거가 가장 친한 친구입니다. 문제가있는 곳을 알아 내기 위해 그것을 사용하는 방법을 배우십시오 : –

+0

프로그램은 if 조건으로 들어갑니다. – Xalion

답변

1

컨트롤의 위치가를 기준으로 부모 - 당신은 당신의 Mario(0, 0)에서, 그것은 당신의 화면 또는 형태의 왼쪽 상단 모서리에 표시되지 않습니다 배치하면,하지만 왼쪽 상단에 Panel의 코너 - 직접적인 부모.

마찬가지로, Panel의 위치는 해당 부모를 기준으로합니다.

은의이 Panel(100, 100)에서 양식에 위치와 크기가 (400, 300)입니다 가정 해 봅시다 - Mario 그 100 개 픽셀에 대한 보이지 않는 것 -이는 Left 속성이 100이고 그것의 Right 속성 500는 것을 의미한다.

그래서 수표가 있어야한다 :

player.Top = screen.Height - player.Height; 
관련 문제