В данный момент разрабатываю проект по проекту 2d Side Scrolling Game или проще говоря, что-то похожее на игру Марио. Проект обязательно должен был быть выполнен в Windows Form Application. Поэтому в архитектуре проекта было решено совершить следующее. Создать две формы. Один для механик, а другой для уровня. Форма с механиками наследует от Form, а форма Level_1 (в данном конкретном случае рассмотрим для первого уровня лишь) наследует от формы с механиками, назовём его Mechanics. Так вот, вся идея этого заключается в том, что когда создается форма Level_1 по умолчанию создается его родитель Mechanics. А это как бы шаблонный форм, то есть все его параметры изначально не проинициализированы, а инициализируются уже в конструкторе класса предка, то есть Level_1, объектами их второго. То есть рассмотрим объект игрока, это PictureBox, в форме Mechanics создаётся пустой PixtureBox, а в форме Mechanics этот же объект получает значение объекта из Level_1, который будет соответствовать игроку в Level_1.
Теперь сама проблема. Получаю следующее исключение, которое появляется когда пытаюсь посмотреть окно дизайна формы Level_1. Подскажите что не так и как исправить.
System.NullReferenceException: Object reference not set to an instance of an object. at My_Mario_Beta_v1.Mechanics.Gametime_Tick(Object sender, EventArgs e) at System.Windows.Forms.Timer.TimerNativeWindow.WndProc(Message& m) at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, WM msg, IntPtr wparam, IntPtr lparam)
Оставлю код на всякий случай тут. Уточнено: Код в целом большой, я конкретно не знаю какая часть для решения проблемы будет нужна, поэтому добавлю при надобности.
public partial class Mechanics : Form
{
bool isLeft = false, isRight = false, isJumping = false, gotKey = false;
int jumpSpeed = 14;
int force = 10;
int score = 0;
const int playerSpeed = 8;
const int backgroundSpeed = 10;
public int lifeNum;
bool hasImmune = false;
const int ghostSpeed = 4;
bool returned = false; // false is left, true is right
const int NS = 70; //NS is number of steps
int count = NS;
int timerTicks = 0;
public PictureBox player;
Label txtScore;
PictureBox background;
PictureBox key;
PictureBox door_closed;
PictureBox heart1, heart2, heart3;
public Mechanics()
{
Gametime.Start();
InitializeComponent();
}
//body
}
public partial class Level_1 : Mechanics
{
public Level_1(int heartnum = 3)
{
this.player = this.Player1;
this.lifeNum = heartnum;
InitializeComponent();
}
// body
}
InitializeComponent(). – Alexander Petrov Dec 05 '22 at 15:04Form.Loadдля такого кода. – aepot Dec 05 '22 at 17:35