2017-02-04 5 views
0

Spawn()のような関数を呼び出したいが、呼び出した後に値を失うことはない。(例えば、Spawn()を呼び出した後もentityPictureを利用できるようにする。後でMainWindow_KeyDown()機能で使用してください)。 Xと同じような変数です。関数からの値の保持

using System; 
using System.Drawing; 
using System.Windows.Forms; 

namespace EpicGame 
{ 
    public partial class MainWindow : Form 
    { 
    public MainWindow() 
    { 
     InitializeComponent(); 
    } 

    public void MainWindow_Load(object sender, EventArgs e) 
    { 
     int EntityCount = 0; 
     Background.ImageLocation = "Background.jpg"; 
     Background.SizeMode = PictureBoxSizeMode.AutoSize; 

     Spawn(600, 600, EntityCount, "Player 1.png"); EntityCount++; 
    } 

    // Controls 
    public void MainWindow_KeyDown(object sender, KeyEventArgs e) 
    { 
     if (e.KeyCode == Keys.D) MoveRight(); 
     entityPicture.Location = new Point(X, Y); 
    } 

    // Movement 
    public void MoveRight() 
    { 
     X++; 
    } 

    // Entity spawning 
    public void Spawn(int X, int Y, int ID, string Path) 
    { 
     PictureBox entityPicture = new PictureBox(); 
     Image Entity = Image.FromFile(Path); 
     entityPicture.Image = Entity; 
     entityPicture.SizeMode = PictureBoxSizeMode.AutoSize; 
     entityPicture.Location = new Point(X, Y); 
     entityPicture.BackColor = Color.Transparent; 
     Controls.Add(entityPicture); 
     entityPicture.BringToFront(); 
    } 

    private void Background_Click(object sender, EventArgs e) 
    { 

    } 
    } 
} 

答えて

0

あなたのようなフォームクラスで、それは公共の宣言することができます。私はちょうど一例としてのPictureBoxを使用entityPictureの種類が分からない

public partial class MainWindow : Form 
    { 
     PictureBox entityPicture = new PictureBox();           

    } 

、あなたは正しい型を使用します。

0

あなたの根本的な問題は範囲の1つです。このビデオを見て、それはあなたの正確な問題をウォークスルー:https://www.youtube.com/watch?v=NemPMKTxM7wあなたが技術的にクラスの先頭へentityPictureを移動することができます

、しかしこれは、WinFormsのウィンドウのように見える与え、私はデザイナーを経てPictureBoxを追加することになりますので、それは一度だけ宣言されています。クラスレベルで宣言してSpawn(つまり= new PictureBox())に繰り返し再初期化すると、メモリリークが発生します。

関連する問題