2015-03-21 5 views
0

Я попытался скомпилировать этот код, но он не будет работать, получаю эту ошибку при компиляции:ошибка: «Pong.Form1.Dispose (BOOL)»: не подходящий метод нашел переопределить

Pong \ Form1.Designer.cs (14,33,14,40): ошибка CS0115: 'Pong.Form1.Dispose (BOOL)': нет подходящего способа нашел переопределить

using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Windows.Forms; 
using System.Media; 

namespace Pong 
{ 
    public partial class gameArea : Form 
    { 
     PictureBox picBoxPlayer, picBoxAI, picBoxBall; 
     Timer gameTime; // also the game loop 

     const int SCREEN_WIDTH = 800; 
     const int SCREEN_HEIGHT = 600; 

     Size sizePlayer = new Size(25, 100); 
     Size sizeAI = new Size(25, 100); 
     Size sizeBall = new Size(20, 20); 

     const int gameTimeInterval = 1; 

     const int ballStartSpeed = 2; 
     const int ballIncreaseSpeedRate = 1; 
     const int ballSpeedLimited = 15; 

     const int aiOffSetLoops = 15; 

     int ballSpeedX = ballStartSpeed; 
     int ballSpeedY = ballStartSpeed; 


     Random rad; 
     int aiOffSet; 
     int aiOffSetCounter; 

     Dictionary<string, SoundPlayer> sounds; 

     public gameArea() 
     { 
      InitializeComponent(); 

      this.DoubleBuffered = true; 

      picBoxPlayer = new PictureBox(); 
      picBoxAI = new PictureBox(); 
      picBoxBall = new PictureBox(); 

      gameTime = new Timer(); 
      gameTime.Interval = gameTimeInterval; 

      gameTime.Tick += new EventHandler(gameTime_Tick); 

      this.Width = SCREEN_WIDTH; 
      this.Height = SCREEN_HEIGHT; 
      this.StartPosition = FormStartPosition.CenterScreen; 
      this.BackColor = Color.Black; 

      picBoxPlayer.Size = sizePlayer; 
      picBoxPlayer.Location = new Point(picBoxPlayer.Width/2, ClientSize.Height/2 - picBoxPlayer.Height/2); 
      picBoxPlayer.BackColor = Color.Blue; 
      this.Controls.Add(picBoxPlayer); 

      picBoxAI.Size = sizeAI; 
      picBoxAI.Location = new Point(ClientSize.Width - (picBoxAI.Width + picBoxAI.Width/2), ClientSize.Height/2 - picBoxPlayer.Height/2); // TODO: why picBoxPlayer and not picBoxAI? 
      picBoxAI.BackColor = Color.Red; 
      this.Controls.Add(picBoxAI); 

      rad = new Random(); 
      aiOffSet = 0; 
      aiOffSetCounter = 1; 

      picBoxBall.Size = sizeBall; 
      picBoxBall.Location = new Point(ClientSize.Width/2 - picBoxBall.Width/2, ClientSize.Height/2 - picBoxBall.Height/2); 
      picBoxBall.BackColor = Color.Green; 
      this.Controls.Add(picBoxBall); 

      // Load Sounds 
      sounds = new Dictionary<string, SoundPlayer>(); 
      for (int k = 1; k <= 10; k++) 
      { 
       sounds.Add(String.Format(@"pong{0}", k), new SoundPlayer(String.Format(@"pong{0}.wav", k))); 
      } 

      // Start Game loop 
      gameTime.Enabled = true; 
     } 

     void gameTime_Tick(object sender, EventArgs e) 
     { 
      picBoxBall.Location = new Point(picBoxBall.Location.X + ballSpeedX, picBoxBall.Location.Y + ballSpeedY); 
      gameAreaCollosions(); 
      padlleCollision(); 
      playerMovement(); 
      aiMovement(); 
     } 

     private void iaChangeOffSet() 
     { 
      if (aiOffSetCounter >= aiOffSetLoops) 
      { 
       aiOffSet = rad.Next(1, picBoxAI.Height + picBoxBall.Height); 
       aiOffSetCounter = 1; 
      } 
      else 
      { 
       aiOffSetCounter++; 
      } 
     } 

     private void gameAreaCollosions() 
     { 
      if (picBoxBall.Location.Y > ClientSize.Height - picBoxBall.Height || picBoxBall.Location.Y < 0) 
      { 
       iaChangeOffSet(); 
       ballSpeedY = -ballSpeedY; 
       sideCollision(); 
      } 
      else if (picBoxBall.Location.X > ClientSize.Width) 
      { 
       padlleSideCollision(); 
       resetBall(); 
      } 
      else if (picBoxBall.Location.X < 0) 
      { 
       padlleSideCollision(); 
       resetBall(); 
      } 
     } 
     private void resetBall() 
     { 
      if (ballSpeedX > 0) 
       ballSpeedX = -ballStartSpeed; 
      else 
       ballSpeedX = ballStartSpeed; 
      if (ballSpeedY > 0) 
       ballSpeedY = -ballStartSpeed; 
      else 
       ballSpeedY = ballStartSpeed; 

      aiOffSet = 0; 
      picBoxBall.Location = new Point(ClientSize.Width/2 - picBoxBall.Width/2, ClientSize.Height/2 - picBoxBall.Height/2); 
     } 
     private void playerMovement() 
     { 
      if (this.PointToClient(MousePosition).Y >= picBoxPlayer.Height/2 && this.PointToClient(MousePosition).Y <= ClientSize.Height - picBoxPlayer.Height/2) 
      { 
       int playerX = picBoxPlayer.Width/2; 
       int playerY = this.PointToClient(MousePosition).Y - picBoxPlayer.Height/2; 

       picBoxPlayer.Location = new Point(playerX, playerY); 
      } 
     } 
     private void aiMovement() 
     { 
      int aiX = ClientSize.Width - (picBoxAI.Width + picBoxAI.Width/2); 
      int aiY = (picBoxBall.Location.Y - picBoxAI.Height/2) + aiOffSet; 

      if (aiY < 0) 
       aiY = 0; 
      if (aiY > ClientSize.Height - picBoxAI.Height) 
       aiY = ClientSize.Height - picBoxAI.Height; 

      picBoxAI.Location = new Point(aiX, aiY); 
     } 
     private void padlleCollision() 
     { 
      if (picBoxBall.Bounds.IntersectsWith(picBoxAI.Bounds)) 
      { 
       picBoxBall.Location = new Point(picBoxAI.Location.X - picBoxBall.Width, picBoxBall.Location.Y); 
       ballSpeedX = -ballSpeedX; 
       aiCollision(); 
      } 
      if (picBoxBall.Bounds.IntersectsWith(picBoxPlayer.Bounds)) 
      { 
       picBoxBall.Location = new Point(picBoxPlayer.Location.X + picBoxPlayer.Width, picBoxBall.Location.Y); 
       ballSpeedX = -ballSpeedX; 
       playerCollision(); 
      } 
     } 
     private void playerCollision() 
     { 
      sounds["pong1"].Play(); 
      SlowDownBall(); 
     } 
     private void aiCollision() 
     { 
      sounds["pong2"].Play(); 
      SlowDownBall(); 
     } 
     private void sideCollision() 
     { 
      sounds["pong3"].Play(); 

      SpeedUpBall(); 
     } 
     private void padlleSideCollision() 
     { 
      sounds["pong9"].Play(); 
     } 
     private void SpeedUpBall() 
     { 
      if (ballSpeedY > 0) 
      { 
       ballSpeedY += ballIncreaseSpeedRate; 
       if (ballSpeedY >= ballSpeedLimited) 
        ballSpeedY = ballSpeedLimited; 
      } 
      else 
      { 
       ballSpeedY -= ballIncreaseSpeedRate; 
       if (ballSpeedY <= -ballSpeedLimited) 
        ballSpeedY = -ballSpeedLimited; 
      } 

      if (ballSpeedX > 0) 
      { 
       ballSpeedX += ballIncreaseSpeedRate; 
       if (ballSpeedX >= ballSpeedLimited) 
        ballSpeedX = ballSpeedLimited; 
      } 
      else 
      { 
       ballSpeedX -= ballIncreaseSpeedRate; 
       if (ballSpeedX <= -ballSpeedLimited) 
        ballSpeedX = -ballSpeedLimited; 
      } 
     } 
     private void SlowDownBall() 
     { 
      if (ballSpeedY > 0) 
      { 
       ballSpeedY -= ballIncreaseSpeedRate; 
       if (ballSpeedY <= ballStartSpeed) 
        ballSpeedY = ballStartSpeed; 
      } 
      else 
      { 
       ballSpeedY += ballIncreaseSpeedRate; 
       if (ballSpeedY >= -ballStartSpeed) 
        ballSpeedY = -ballStartSpeed; 
      } 

      if (ballSpeedX > 0) 
      { 
       ballSpeedX -= ballIncreaseSpeedRate; 
       if (ballSpeedX <= ballStartSpeed) 
        ballSpeedX = ballStartSpeed; 
      } 
      else 
      { 
       ballSpeedX += ballIncreaseSpeedRate; 
       if (ballSpeedX >= -ballStartSpeed) 
        ballSpeedX = -ballStartSpeed; 
      } 
     } 
    } 
} 
+0

Вы модифицировали созданный конструктором код (Pong \ Form1.Designer.cs)? – kennyzx

+1

Вы не всерьез ожидаете, что мы прочтем все, что вам мешает? удалите весь код, который не имеет значения. –

+0

Я заметил одно, что ошибка говорит 'Pong.Form1.Dispose (bool)', где имя класса 'gameArea', вы изменили имя класса? – Shell

ответ

1

Как указывались в комментариях, изменение имени класса в файле .cs без обновления других ссылок может сломать вещи. Вы начали с класса Form1, изменили одну из ссылок на gameArea, но не на другие ссылки. В результате у вас есть два класса, gameArea, который происходит от Form и Form1, который неявно происходит от object. Form1 содержит метод Dispose, но object не имеет Dispose метод для переопределения.

Чтобы исправить это, сначала смените gameArea на Form1. Это должно позволить вашему коду снова скомпилироваться. Затем откройте конструктор и используйте его, чтобы переименовать Form1 в gameArea. Это будет немного больше, чем вы сделали вручную.

Hans Passant указывает в комментариях, что также можно использовать опцию «Переименовать» из контекстного меню (в разделе «Рефактор») вместо дизайнера. Это обновит любые ссылки в коде, не пройдя процесс создания формы времени разработки и сохранив его. В результате могут возникнуть несколько иные результаты, связанные с переименованием в дизайнере, например, если ваш код обращается к свойству формы Name, но для большинства программ он должен быть достаточно хорошим.

+0

Возможно, вы захотите упомянуть правой кнопкой мыши> Рефакторинг> Переименовать как способ сделать то же самое из редактора. –

+0

@HansPassant Спасибо, но, проверяя это, он фактически не делает то же самое. В пустой форме я сразу обнаружил отличия: rename не обновляет имя и комментарии в файле конструктора. Теперь это безвредные различия, код все равно будет работать, но я не уверен, что нет других различий в более сложных формах, которые имеют значение. – hvd

+0

Он отлично работает, сериализатор кода заботится только о типах имен. –

Смежные вопросы