Задача 1 :
Как сказал Блау, ваши камни будут отсортированы спереди назад, а поскольку они имеют одинаковую глубину, они (несколько раз) будут отсортированы случайным образом.Вероятно, это связано с точностью плавания (или ее отсутствием).
Вместо того, чтобы изменять глубину ваших камней, вы можете использовать SpriteSortMode.Deferred
, который будет рисовать спрайты по порядку и задерживать рендеринг, пока вы не вызоветеКонец (или до тех пор, пока spriteBatch не сможет обрабатывать больше спрайтов и должен очищаться).
Проблема 2 :
Как сказал Блау, это также, вероятно, связано сточность плавания.Однако проблемы можно избежать.Представьте, что у вас есть движущаяся плитка, и ваш игрок ходит рядом с этой плиткой.Затем плитка перемещается поверх вашего игрока (потому что мы забыли кодировать плитку , а не to).Ваш игрок теперь не может двигаться, потому что любое направление, в котором игрок пытается двигаться, является «недопустимым», потому что он будет касаться этой плитки.
Проблема в том, что мы предотвращаемперсонаж из движущегося .Если бы персонаж всегда мог двигаться, у нас не было бы этой проблемы.Однако, если персонаж мог всегда двигаться, он мог бы просто более правильно проходить через вещи.Чтобы предотвратить это, нам нужно противоположное действие, действующее против персонажа, когда он движется против твердого объекта.
Решение :
Разрешить игроку двигаться в объект,а затем сканировать все объекты, к которым он прикасается.Если он касается какого-либо из них, определите, в каком направлении вы должны отодвинуть его на от каждого объекта, и объедините все эти направления в один вектор.Масштабируйте этот вектор до некоторой разумной величины (чтобы предотвратить резкое отталкивание персонажа).Переместите игрока в соответствии с этим вектором
Проблемы с этим методом :
Если у вас есть сила гравитации или тому подобное, вы можете обнаружить, что ваш персонаж "тонет"в землю.Это результат воздействия силы тяжести на силу, которая оттолкнула игрока от тайлов.Проблема может быть решена путем смещения персонажа от любых плиток перед применением силы на игрока, чтобы отодвинуть его от себя.
Это оказывается оченьсложная проблема, и она уже решена для вас.
Box 2D / Farseer Physics Engine :
Вы, наверное, слышали об этом раньшеи подумал: «О, я просто сверну свой, потому что это звучит супер весело!»И хотя программирование вашего собственного физического движка может быть очень увлекательным, оно также занимает очень много времени.Если вы хотите быстро запустить свою игру с физикой (даже если это простая физика, подобная Sonic), Эрин Катто заложил для вас все основы.:)
Проверьте это:
Box2D XNA: http://box2dxna.codeplex.com/
Физика Farseer: http://farseerphysics.codeplex.com/