Название, вероятно, слишком упрощено, поэтому, пожалуйста, прочитайте всю проблему здесь.
У меня есть 4 класса: менеджер уровней, игроков, сеток и физики.
Менеджер должен управлять сетками.У игрока есть одна сетка (сетки содержат несколько хитбоксов).Они оба загружены в конструктор уровня.
Цель состоит в том, чтобы класс игрока создал свою собственную сетку, а затем уровень должен добавить эту сетку в список сеток менеджера.
Вот как я хочу, чтобы мой код был структурирован (и как это почти сейчас):
public class Player
{
public SFPhyMesh Mesh { get; set; }
public Player()
{
Mesh = new Mesh();
}
}
public class PhysicsManager
{
public List<Mesh> Meshes;
public void AddMesh(Mesh mesh)
{
Meshes.Add(mesh);
}
}
public class Level
{
PhysicsManager physics;
Player player;
public Level()
{
player = new Player();
physics = new PhysicsManager();
physics.AddMesh(player.Mesh);
}
}
Обратите внимание, что я исключил все менее важные части.
Проблема здесь в том, что функция AddMesh
создает копию для добавления в список.Я попытался поместить ключевое слово ref
перед его параметром, но безуспешно.Я также пытался создать открытую переменную для сетки игрока вместо открытого свойства в сочетании с ключевым словом ref
в функции AddMesh
, но безуспешно.Выглядит так:
public class Player
{
public SFPhyMesh Mesh;
...
}
public void AddMesh(ref Mesh mesh)
{
Meshes.Add(mesh);
}
public class Level()
{
player = new Player();
physics = new PhysicsManager();
physics.AddMesh(ref player.Mesh);
}
Единственный способ, которым это работает, это когда конструктор Level
выглядит так:
public class Level
{
PhysicsManager physics;
Player player;
public Level()
{
var pMesh = new Mesh();
player = new Player();
player.Mesh = pMesh();
physics = new PhysicsManager();
physics.AddMesh(pMesh);
}
}
Я не хочу, чтобы уровень класса беспокоился осетка каждого игрока / врага / лица.Мне нужно, чтобы каждый из этих классов отвечал за свою собственную сетку.Но я изо всех сил стараюсь предоставить менеджеру по физике точное местоположение в памяти меша игрока.
Я проверяю это, добавляя гравитацию к сетке с метками «падающие».В менеджере я только добавляю эту одну сетку, и я ставлю точку останова, где должна применяться сила тяжести, и эта точка останова попадает.Я вижу, что сетка, которую притягивает гравитация, успешно меняет свою скорость и положение, но я не вижу этого на экране.Я вижу, что мой игрок стоит на месте, а не падает.Это может означать только то, что копия меша игрока добавляется в список мешей в менеджере физики вместо меша реального игрока.Конечно, это происходит только с первой версией конструктора уровня.
Есть ли способ оставить конструктор уровня вне всего этого бизнеса с сетками?