2017-01-07 7 views
0

2Dマリオスタイルのゲームを作成しようとしています。すべてが私がそれをもっと「客観的」にするまで働いた.Marioは窓の終わりに止まらない。私がrefを使わずにメソッドを作ると、マリオはしばらく停止しません。メソッドでrefを使った単純な2DゲームでのC#の不足

マリオクラス

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; } 
    } 

} 

メインクラス - を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

なぜこのタグ付き[タグです:のGraphics2D ]? – devRicher

+1

デバッガはあなたの親友です。あなたの問題がどこにあるかを見つけるためにそれを使用する方法を学んでください:p –

+0

プログラムはif条件に入ります。 – Xalion

答えて

1

その親にコントロールの位置が相対的である - あなたは(0, 0)であなたのMarioを配置する場合、それはあなたの画面またはフォームの左上隅に表示されますが、左上ではありませんPanelのコーナー - その直接の親。

同様に、そのPanelの位置も、その親に対して相対的です。 Marioそれらの100個のピクセルのため視界の外になります - これは、そのLeftプロパティが100であり、そのRightプロパティが500であることを意味します -

はのは、あなたのPanel(100, 100)でフォーム内に配置し、そのサイズは(400, 300)ですと仮定しましょう。

だからあなたのチェックは次のようになります。

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

あなたは既に(Height代わりのBottomを使用して)縦置きで正しいことをした:

player.Top = screen.Height - player.Height; 
関連する問題