Видеоуроки XNA - Страница 2 - Nalchik On Line - Форум Нальчика и КБР
Nalchik On Line - Форум Нальчика и КБР
  (#16) Непрочитано
grand Master
Аватар для Leon
Сообщений: 1,050
Регистрация: 08.02.2007
Репутация: 47 Рейтинг
29.09.2011, 10:45

На что способен пхп я не знаю, но логика просматривается, движение в одну сторону реализовано, для матрицы примерно так и делают, что говорить я сам новис в игроделе, точно могу сказать что :

for(int i=0,n=0; i<100000000;i++)//для задержки кадра
n=i;

это не прокатит, надо связывать игру со временим, таймером
Ответить с цитированием
  (#17) Непрочитано
Крутой
Сообщений: 162
Регистрация: 19.12.2010
Адрес: Нальчик
Возраст: 28
Репутация: 1 Рейтинг
29.09.2011, 15:13

Цитата:
Сообщение от Leon Посмотреть сообщение
На что способен пхп я не знаю, но логика просматривается, движение в одну сторону реализовано, для матрицы примерно так и делают, что говорить я сам новис в игроделе, точно могу сказать что :

for(int i=0,n=0; i<100000000;i++)//для задержки кадра
n=i;

это не прокатит, надо связывать игру со временим, таймером
Код был на с++.
На счет таймера - понятно. Я просто не хотел нагружать код десятком лишних строк, а так в игре естественно будет задержка через таймер.
Еще один вопрос:
На твоем скрине видно, что игра построена на клеточной основе, но объекты имеют разный размер. Как такое реализовать? Нужно выводить изображения слоями (например, сперва матрицу с неживыми объектами и поверх нее живые) или есть другой способ?
p.s. Что с первой страницей случилось?
Ответить с цитированием
  (#18) Непрочитано
grand Master
Аватар для Leon
Сообщений: 1,050
Регистрация: 08.02.2007
Репутация: 47 Рейтинг
29.09.2011, 16:18

Цитата:
Сообщение от Taktik Посмотреть сообщение
На твоем скрине видно, что игра построена на клеточной основе, но объекты имеют разный размер. Как такое реализовать? Нужно выводить изображения слоями (например, сперва матрицу с неживыми объектами и поверх нее живые) или есть другой способ?
p.s. Что с первой страницей случилось?
у меня клеточная основа- это из-за того что нет редактора уровней, и поэтому реализовано тоже матрицей чтоб не мучиться, а так любой объект "СТЕНА" может иметь любой размер и любую картинку, можно также расспологать где угодно, или задавать параметр проходимость, вот например
Нажмите на изображение для увеличения
Название: my4.JPG
Просмотров: 48
Размер:	52.1 Кб
ID:	4078

Если всё одного размера, то обработка столкновений можно реализовать в переборе элементов матрицы (i j), когда объекты разного размера кроме (i j) элемента ты проверяешь (x, y, ширина, высота) или (x1, y1, x2, y2) этого элемента.

На счёт отрисовки, у меня что первым выводишь, то первым рисует, отсюда пригая делаем так, фон первым выводим, а потом блоки и персонажи, последним HUD(score).

Всё зависит от графики в твоей системы, какая она такая и логика.
Ответить с цитированием
Понравилось: Понравилось: Taktik (29.09.2011)
  (#19) Непрочитано
Крутой
Сообщений: 162
Регистрация: 19.12.2010
Адрес: Нальчик
Возраст: 28
Репутация: 1 Рейтинг
15.01.2012, 13:21

Leon, если не жалко выложи исходники, или хотя бы те куски кода где физика и обработка столкновений.
Ответить с цитированием
  (#20) Непрочитано
grand Master
Аватар для Leon
Сообщений: 1,050
Регистрация: 08.02.2007
Репутация: 47 Рейтинг
16.01.2012, 13:35

вечером отпишусь
Ответить с цитированием
  (#21) Непрочитано
grand Master
Аватар для Leon
Сообщений: 1,050
Регистрация: 08.02.2007
Репутация: 47 Рейтинг
17.01.2012, 13:58

Цитата:
Сообщение от Taktik Посмотреть сообщение
Leon, если не жалко выложи исходники, или хотя бы те куски кода где физика и обработка столкновений.
У меня нич не осталось, скоро заново начну делать, а так столкновение не сложное дело в примерах там показываеться по сслыке из первой страниц,

суть: есть массив объектов блоков(ящики, стенки кубики), со своиствами X, Y, X+длина блока, Y+высота блока.

тоже самое есть и у твоего персонажа X, Y, X+длина персонажа, Y+высота персонажа.

В XNA все четыре параметра можно хранить одной переменной (class) типа Rectangle, мёд ещё в том что у класса Rectangle есть метод Intersects который сравнивает пересечение с такой же переменной.


Rectangle[n] rect;
Rectangle herorect;


при движения по горизонтали

for (int i=1; i < n; i++)
{
if rect.Intersects(herorect)
{
"столкновение с i-м блоком и остановка движения по горизонтали"
}
else
{
"нет столкновения"
}
}

при движения по вертикали

for (int i=1; i < n; i++)
{
if rect.Intersects(herorect)
{
"столкновение с i-м блоком и остановка движения по вертикали"
}
else
{
"нет столкновения"
}
}

если ничего не понятно то лучше будет на твоём примере тебе объяснить или вместе делать. С физикой на первых порах мудрить много надо, в зависимости от забирание по лестнице, плавание по воде, полёт, турбо режим и прочее,

Последний раз редактировалось Leon; 17.01.2012 в 14:02.
Ответить с цитированием
Понравилось: Понравилось: Taktik (17.01.2012)
  (#22) Непрочитано
grand Master
Аватар для Leon
Сообщений: 1,050
Регистрация: 08.02.2007
Репутация: 47 Рейтинг
29.01.2012, 22:01

Taktik
http://habrahabr.ru/blogs/gdev/131931/
Ответить с цитированием
  (#23) Непрочитано
Новичок
Аватар для Аскер-джан
Сообщений: 18
Регистрация: 05.02.2012
Репутация: 0 Рейтинг
07.02.2012, 00:57

Пацаны, радуете! Не перевелись еще энтузиасты на матушке-земле )) Респект! Делайте то, что вам нравится!
Ответить с цитированием
  (#24) Непрочитано
Крутой
Сообщений: 162
Регистрация: 19.12.2010
Адрес: Нальчик
Возраст: 28
Репутация: 1 Рейтинг
28.09.2012, 00:14

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

В общем мне надо реализовать ускорение во время прыжка персонажа.
Вот класс (на C#) описывающий персонажа. Есть метод Jump. В нем реализован прыжок но без ускорения:
PHP код:
public class Pers
    
{
        
//private float v;//скорость
        //private float a;//ускорение
        
private float X;
        private 
float Y;
        private 
float Y0;//координата от которой начинается движение
        
private float jumpHeight;//высота прыжка
        
private float step;
        private 
bool jumping;//флаг состояния. Если true - персонаж движется вверх, иначе - вниз

        //начальные координаты
        
public Pers()
        {
            
this.jumpHeight 200;//высота прыжка
            
this.100;
            
this.500;
            
this.Y0 500;
            
this.step 5;
            
this.jumping true;
        }

        
//персонаж прыгает
        
public void Jump()
        {
            if (
jumping)//если перс летит вверх
            
{
                if (
>= (Y0 jumpHeight))//если координата по Y больше высоты прыжка - движемся вверх 
                
{
                    
-= step;
                }
                else
                {
                    
/* этот блок выполняется если перс достигает самую верхнюю точку прыжка*/
                    
Y0 Y;
                    
jumping false;//меняется направление полета
                
}
            }
            else
//перс летит вниз
            
{
                if (
<= Y0 jumpHeight)//если координата по Y меньше точки с которой начался прыжок - движемся вниз
                
{
                    
+= step;
                }
                else
                {
                    
Y0 Y;
                    
jumping true;
                }
            }
        }
    }

    class 
Program
    
{
        static 
void Main()
        {
            
bool gameLoop true;
            
Pers pers = new Pers();

            while (
gameLoop)
            {
                
pers.Jump();
                
//...
            
}
        }
    } 
Собственно вопрос - как сделать ускорение?

Последний раз редактировалось Taktik; 28.09.2012 в 00:20.
Ответить с цитированием
  (#25) Непрочитано
MythBuster
banlist
Сообщений: 4,239
Регистрация: 16.06.2012
Репутация: 239 Рейтинг
28.09.2012, 07:09

Taktik,
У тебя step - фактически скорость (считаем, что итерации по времени будут одинаковы) - например, пикселей/итерацию.
Ускорение - это линейное изменение скорости, отсюда step должен меняться линейно, на величину g. При движении вверх уменьшаться от некоторого step0 (начальная скорость) до 0, а при движении вниз увеличиваться от 0 до step0.

Если исходными данными будет необходимая высота прыжка, тогда надо перед каждым прыжком рассчитать step0 (g в твоем мире фиксированный) step0 = Sqrt(2*h*g);

Добавлено
А по-хорошему, ты должен привязаться к таймеру. Запомнить момент начала прыжка (jumpedAt), и рассчитывать свое положение в зависимости от времени с начала прыжка (dt = Now - jumpedAt). Вот формулы

Последний раз редактировалось calabaza; 28.09.2012 в 07:38.
Ответить с цитированием
Понравилось: Понравилось: Taktik (28.09.2012)
  (#26) Непрочитано
Крутой
Сообщений: 162
Регистрация: 19.12.2010
Адрес: Нальчик
Возраст: 28
Репутация: 1 Рейтинг
28.09.2012, 21:25

calabaza, cпасибо за подсказку. Все оказалось проще чем я думал:
PHP код:
public void Jump() 
        { 
            if (
jumping)
            { 
                if (
>= (Y0 jumpHeight))
                { 
                    
velocity -= acceleration;
                    
-= velocity
                } 
                else 
                { 
                    
Y0 Y
                    
jumping false;
                } 
            } 
            else
            { 
                if (
<= Y0 jumpHeight)
                { 
                    
velocity += acceleration;
                    
+= velocity
                } 
                else 
                { 
                    
450;
                    
Y0 Y
                    
jumping true
                } 
            } 
Ответить с цитированием
  (#27) Непрочитано
grand Master
Аватар для Leon
Сообщений: 1,050
Регистрация: 08.02.2007
Репутация: 47 Рейтинг
29.09.2012, 00:52

Taktik
поздно спалил вопрос, а какую игру пишешь?
Ответить с цитированием
  (#28) Непрочитано
Крутой
Сообщений: 162
Регистрация: 19.12.2010
Адрес: Нальчик
Возраст: 28
Репутация: 1 Рейтинг
29.09.2012, 21:46

Игра - это громко сказано, сейчас просто любительская поделка на андроид. Начал писать ради фана и чтобы разобраться с джавой. Но если прикрутить графику и реализовать движение платформ, будет такая же играбельная как и оригинал... я надеюсь (на скрине оригинал)
Миниатюры
Нажмите на изображение для увеличения
Название: Doodle.jpg
Просмотров: 18
Размер:	56.9 Кб
ID:	5797  

Последний раз редактировалось Taktik; 29.09.2012 в 21:49.
Ответить с цитированием
  (#29) Непрочитано
grand Master
Аватар для Leon
Сообщений: 1,050
Регистрация: 08.02.2007
Репутация: 47 Рейтинг
01.10.2012, 11:03

дудуджампер
Ответить с цитированием
Ответ


Вернуться Nalchik On Line - Форум Нальчика и КБР > Hard & Soft > Soft > Developing

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход