мне нужна помощь с WPFWPF, приложение теряет способность создавать или манипулировать GUI объекты
Я начала работы с WPF и хотел сделать простой змея игру со следующими классами:
GameBoard : Window
{
private Game game;
public GameBoard(){ this.game = new Game(this); }
public Rectangle rectangleFactory(int x, int y)
{
Rectangle rect = new Rectangle();
rect.Width = 10;
rect.Height = 10;
GameArea.Children.Add(rect); /// My Canvas is called GameArea
Canvas.SetLeft(rect, 10 * x);
Canvas.SetTop(rect, 10 * y);
return rect;
}
public void rectangleBin(Rectangle)
{
GameArea.Children.Remove(rect);
}
}
Thing{
private GameBoard Board;
private System.Windows.Shapes.Rectangle rect;
private int[] coordinaters;
public Thing(GameBoard board, int[] coordinates)
{
this.Board = board;
Draw();
}
public Draw(){ rect = Board.rectangleFactory(coordinates);}
public Dispose(){ Board.rectangleBin(rect)}
}
SnakeSegment : Thing
{
SnakeSegment next;
public SnakeSegment(GameBoard board, int[] coordinates) : base(board, coordinates) { }
}
Apple : Thing()
{
public Apple(GameBoard board, int[] coordinates) : base(board, coordinates) { }
public void newApple()
{
Dispose();
getNewCoordinate();
Draw();
}
}
Game
{
private GameBoard Board;
private Apple apple;
Private Snake snake;
private static System.timers.timer timer
public Game(GameBoard board)
{
this.Board = board;
this.apple = new Apple(board, int start_coordinates);
this.snake = new snake(this);
this.timer = new Timer(100);
timer.Elapsed += new ElapsedEventHandler(update_game);
}
public void update_game(object o, ElapsedEventArgs s){ snake.move_forward(); }
}
Snake
{
private SnakeSegmet Head;
Private SnakeSegment Tail
private GameBoard Board;
public Snake(Game game)
{
this.Board = game.Board;
this.Head = new SnakeSegment(Board, start_cooridantse)
this.Tail = Head;
}
private void AddSegment()
{
Head.Next = new SnakeSegment(Board, newCoordinates);
Head = Head.Next;
}
}
Существует, конечно, больше, но я оставил его в интересах удобочитаемости.
Когда я начать игру он втягивает область игры и добавляет яблоко и первоначальный прямоугольник змеи, до сих пор так хорошо
Но я обновить игру, и все идут к югу моего следующего вызова SnakeSegment конструктор в Head.Next = new SnakeSegment()
заканчивается rectangleFactory при вызове new Rectangle()
программа не врезаться, но опрокидывается текущий стек и больше ничего не выполняется untinl таймер поднимает другое событие
ив пытался устраняйте и перенаправляйте поток немного, и если я вместо этого назову Apple :: newApple(), то то же самое произойдет, когда я доберусь до GameArea.Children.Remove(rect);
Im совершенно новый для WPF, и это действительно дает мне головную боль, если кто-нибудь может объяснить, почему это бывает id, очень благодарен.
С уважением, Tobias
** Не создавайте элементы пользовательского интерфейса или не манипулируйте ими в процедурных кодах в WPF. Для этого и предназначен XAML. ** Изучите MVVM, прежде чем писать какую-либо строку кода в WPF. –
@HighCore Не самый великий совет откровенно. Всегда потребуется код UI. Пользовательское поведение, динамическая анимация, пользовательские элементы управления. – Gusdor
@ Гусдор неправильно. Начинающие в WPF ** должны понимать, что WPF - это не winforms, ни любой другой дрянной динозавр, наполовину испеченный устаревший бесполезный wannabe интерфейс. См. Ответ Шеридана. После того, как сделан inital mindshift, вы узнаете, что принадлежит коду, и что принадлежит виртуальным машинам и что принадлежит XAML. –