XNA C# 2D игра платформера

Я пытаюсь сделать (фигура, как к..) 2-й платформер в XNA.

Я знаю, как создать сетку мозаики и как выполнить обнаружение коллизий. Я выполняю обнаружение коллизий на 9 мозаиках ограничения плеера, но я хотел бы знать, существует ли лучший способ выполнить обнаружение коллизий.

Я читал, Оплетка не использует мозаики, но соединила изображения или что-то, как Вы выполняете обнаружение коллизий на тех? и то, что лучше, чем использование мозаик?

7
задан Restart 9 February 2010 в 09:12
поделиться

4 ответа

Предполагая, что вы не против использования стороннего инструмента для выполнения большей части работы за вас, возможно, вам будет лучше использовать что-то вроде Box2D для C #.

http://www.box2d.org/ http://code.google.com/p/box2dx/

Эта библиотека предоставит вам возможности обнаружения столкновений и физики.

3
ответ дан 7 December 2019 в 12:19
поделиться

Если вы собираетесь в ретро-стиле, то плитку, безусловно, можно использовать! Однако, если вы хотите что-то более "современное", тогда вы можете пойти с более традиционным физическим движком. Farseer Physics - отличный движок, и несколько человек использовали его для создания платформеров. Он основан на Box2D и подобных движках, но предлагает более простой API и несколько уникальных возможностей (например, текстура к геометрии), и я сам могу свидетельствовать о его тонкости, немного поиграв с ним.

1
ответ дан 7 December 2019 в 12:19
поделиться

С учетом следующей таблицы

CREATE TABLE [dbo].[Orders](
    [OrderID] [int] IDENTITY(1,1) NOT NULL,
    [CustomerID] [int] NULL,
    [OrderDate] [datetime] NULL,
     CONSTRAINT [PK_Orders] PRIMARY KEY CLUSTERED 
    (
        [OrderID] ASC
    )
)

следующая инструкция показывает последний заказ, размещенный клиентом в течение периода времени, за которым следуют другие заказы.

;With OrderList As
(
Select Top 100 Percent * From dbo.Orders
Where OrderDate >= DateAdd(hh, -1, GetDate())
Order By OrderDate Desc
)
Select 'First' As DataType, 
    CustomerID, Min(OrderID) As OrderID, Min(OrderDate) As OrderDate
From OrderList
Group By CustomerID
Union All
Select 'Second' As DataType,
    CustomerID, OrderID, OrderDate
From OrderList
Where OrderID Not In
(
    Select Min(OrderID) As OrderID
    From OrderList
    Group By CustomerID
)
--Union All
--Select 'Raw' As DataType, 
--    CustomerID, OrderID, OrderDate
--From Orders

Последняя часть комментируется, поскольку я использовал ее, чтобы проверить, действительно ли я получил правильные строки.

Короче говоря, инструкция With ограничивает заказы из таблицы заказами, размещенными в течение последнего часа на основе текущей системной даты, и упорядочивает их по дате заказа. Первый оператор (Select 'First') затем извлекает только первые заказы клиента. Второй оператор (Select 'Second') затем извлекает все другие порядки, которые отсутствуют в первом операторе.

Это должно работать так, как вы ожидали, Мухаммед, однако у меня нет 1000 строк, чтобы проверить это. Производительность должна быть нормальной, так как деталь With создаст временную таблицу для работы.

-121--4501520-

Я был бы осторожен с пользовательскими разделителями, потому что они могут сломаться в будущем, например, если кто-то использует Юникод, а ваш пользовательский разделитель является частью другого символа.

-121--1704920-

Вероятно, вам нужно немного больше, чем обнаружение столкновений для такой игры, как оплетка. Я бы предположил, что вам также нужен физический двигатель. Я бы рекомендовал вам взглянуть на Farseer Physics engine , который является двигателем 2D который очень хорошо работает с XNA. Он поддерживает ряд различных методов обнаружения столкновений.

1
ответ дан 7 December 2019 в 12:19
поделиться

Проверяли ли вы примеры в серии столкновений на создателях XNA club, в частности пример pixel-collision ?

0
ответ дан 7 December 2019 в 12:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: