Результаты поиска
| |
wcpt | Дата: Понедельник, 09 Сентября 2013, 17:00 | Сообщение # 421 | Тема: Дайте Совет |
постоянный участник
Сейчас нет на сайте
| чем же это не рекомендуется?
|
|
| |
wcpt | Дата: Понедельник, 02 Сентября 2013, 12:16 | Сообщение # 422 | Тема: Пишу уроки? |
постоянный участник
Сейчас нет на сайте
| я выбираю ассемблер.
|
|
| |
wcpt | Дата: Воскресенье, 21 Июля 2013, 11:44 | Сообщение # 423 | Тема: Вики по DirectX 11 |
постоянный участник
Сейчас нет на сайте
| Цитата (Archido) Это заблуждение. Порча памяти - это самая большая и самая популярная проблема при написании программ на С++, и чем больше эта программа - тем сложнее все там "контроллировать". Это я не только о DX, а вообще. Но мы то речь ведем не о "вообще" а конкретно о дх. Если уж так рассуждать (говоря вообще), то память можно запороть и на огл... есесно разработка игр и всякого медиа при помощи профессиональных средств на цпп как никак требует опыта... не следует же зачинать все сразу с геймдева... это я к тому, что в идеале тот, кто решил освоить всякие дх и огл, все-таки должен уметь "работать" с памятью, т.е. все нулевые-ненулевые-всякие прочие указатели должен держать в уме... а это значит, что потенциально проблемой для новичков в дх это не должно быть... надеюсь, верно изъяснился
Сообщение отредактировал wcpt - Воскресенье, 21 Июля 2013, 11:51 |
|
| |
wcpt | Дата: Суббота, 20 Июля 2013, 19:17 | Сообщение # 424 | Тема: Вики по DirectX 11 |
постоянный участник
Сейчас нет на сайте
| хочу тоже сказать, что я совсем не поддерживаю мысль, что огл проще. Банально из-за того, что в нем нет ооп. Без ооп легко запутаться(лично мне!)... а ооп в дх не сложный, да и в нем всего то штук 20 интерфейсов, пара сотен контекстно зависимых констант. все завязано на девайсе и его контексте - тут НЕГДЕ потеряться. Да, могут быть сложности с различными DESC, но ведь это все-таки не конструктор игр... да и в огл свои причуды есть. Да, указатели можно уронить, но ведь не нужно быть гуру, чтобы их "контроллировать".
|
|
| |
wcpt | Дата: Суббота, 24 Ноября 2012, 17:52 | Сообщение # 425 | Тема: Путь программиста. Какой он? |
постоянный участник
Сейчас нет на сайте
| блин вот я программировать начал лет в десять, но потом забросил, и теперь, когда мне 17, я могу сказать что зря! Если бы тогда у меня был бы интернет или книги, я боюсь даже представить, чтобы из языков я бы учил сейчас. Быть может, изучил бы все и давно бы игры писал, ан нет, забросил
|
|
| |
wcpt | Дата: Суббота, 24 Ноября 2012, 17:13 | Сообщение # 426 | Тема: Расчет итогов сражения |
постоянный участник
Сейчас нет на сайте
| Спасибо, пригодится!
|
|
| |
wcpt | Дата: Вторник, 20 Ноября 2012, 20:36 | Сообщение # 427 | Тема: Расчет итогов сражения |
постоянный участник
Сейчас нет на сайте
| наверно все это нужно считать относительно доли опр. типа юнита в отряде. Допустим, если пехоты половина, то шанс встретить пехотинца строго говоря, 1/2+- случайность, шансы встретить других правятся так же в соотв. с этой случайностью+-случайность. С другой стороны, этот пехотинец может встретиться с юнитом другого отряда по аналогичной схеме.
Сообщение отредактировал wcpt - Вторник, 20 Ноября 2012, 20:39 |
|
| |
wcpt | Дата: Вторник, 20 Ноября 2012, 20:25 | Сообщение # 428 | Тема: Расчет итогов сражения |
постоянный участник
Сейчас нет на сайте
| блин, ну знал бы я, как все это корректировать надо для лучшего баланса, вопрос бы не стоял! А так... Насчет арбалетчиков и проч. - с радостью бы добавил, если бы имелась возможность сделать бой намного более гибким и с возможностью просчета, кто на кого напал - арбалетчик на пехотинца, али наоборот
|
|
| |
wcpt | Дата: Вторник, 20 Ноября 2012, 19:09 | Сообщение # 429 | Тема: Расчет итогов сражения |
постоянный участник
Сейчас нет на сайте
| да добавить можно все, что угодно - но будет ли это работать? Забыл добавить - некоторые способы просто не будут нормально работать - например, если юнитов очень много(у меня так и есть!) Вот например: есть пехота, тяж. пехота, лучники, кавалерия и какой-нибудь спец. отряд, который добавляет немного "случайности". Пехота хороша против всех, кроме кавалерии и тяжелой пехоты, тяжелая пехота хороша против всех, кроме лучников, лучники хороши против тяжелой пехоты, но их уделывает кавалерия, кавалерия косит лучников и пехоту,спец отряд слаб против всех, но добавляет всем друзьям боевой дух. Если участников битвы очень много, то учет всего этого для каждого воина посредством перебора, понятное дело, мне не подходит. Можно подсчитать общее колво участников, взять какое либо число из них, по соотношению численности подсчитать долю каждого типа участника каждого отряда, подсчитать мощь той и той группы, и производить расчет до тех пор, пока боевой дух какого-либо отряда не достигнет критического значения, сражаться! Затем, уцелевшие в этой битве как бы становятся "отработанными" и выделяется следующая группа, и так пока все единицы всех отрядов не отработаются. У кого боевого духа меньше - проиграл. Я пытался так сделать, но результаты меня совсем не удовлетворили, что же я делал не так?
Добавлено (20.11.2012, 19:09) --------------------------------------------- Вот еще как я сделал - подсчитал отношение силы второго отряда к кол-ву первого, потом подсчитал долю юнитов опр. типа во всем отряде, отношение помножил на соотношение силы/кол-ва и уменьшил кол-во на это значение. Все бы ничего, но иногда выходит, что если численность войск отрядов не равна приблизительно, то численность меньшего отряда уменьшается слишком быстро и он мало чем может навредить другому отряду, даже если соотношение, допустим, 4/3. Как же быть?
Сообщение отредактировал wcpt - Вторник, 20 Ноября 2012, 19:12 |
|
| |
wcpt | Дата: Понедельник, 19 Ноября 2012, 19:58 | Сообщение # 430 | Тема: Расчет итогов сражения |
постоянный участник
Сейчас нет на сайте
| неправильно? Как же тогда?
|
|
| |
wcpt | Дата: Понедельник, 19 Ноября 2012, 19:35 | Сообщение # 431 | Тема: Расчет итогов сражения |
постоянный участник
Сейчас нет на сайте
| Не нашел, куда еще задать подобный вопрос. Делаю свою игру - пошаговую стратегию. Вот допустим, идет сражение, которое игрок контролировать не может. В одном отряде например, 100 юнитов одного типа, и 50 другого. При этом первый юнит в два раза сильнее второго. В другом отряде 500 и 300 юнитов соответственно. Кроме того, есть несколько факторов, влияющих на исход сражения - боевой дух и проч. Как же все-таки рассчитать исход сражения? Вот например 100*2+50*1=450 - "сила" первого отряда, 500*2 + 300*1 = 1300 - сила второго отряда - как считать, сколько юнитов останется у каждого отряда после сражения? Я пробовал уменьшать кол-во вот так:
сила2/кол-во1 - некоторое значение "удельной силы" для первого отряда
сила1/кол-во2 -для второго
ну и затем
кол-во1 юнитов первого типа -= (сила2/кол-во1)*кол-во1 юнитов первого типа/кол-во1
так же и со вторым, в конце округлить значения - потом по результатам потерь уменьшить боевой дух, тот у кого его значение меньше критического - проиграл.
Только такой расклад мне не подходит - исход сильно зависит от "входного" количества!
|
|
| |
wcpt | Дата: Понедельник, 22 Октября 2012, 16:18 | Сообщение # 432 | Тема: 2д столкновения |
постоянный участник
Сейчас нет на сайте
| Тогда да, ты меня правильно понял
Добавлено (22.10.2012, 16:13) --------------------------------------------- Короче нашел я вот такой код Code if Hero.spd!=0 { for(int i=0; i<Hero.dist; i++) if PlaceFree(Hero.POS.X+Hero.spd,Hero.POS.Y - i) { Hero.POS.X+=Hero.spd; Hero.POS.Y-=i; if PlaceFree(Hero.POS.X,Hero.POS.Y+1) if !PlaceFree(Hero.POS.X,Hero.POS.Y+Hero.dist+1) for(int i=0 ;i<Hero.dist+1;i++) { if !PlaceFree(Hero.POS.X,Hero.POS.Y+i) { Hero.POS.Y+=i-1; break; } } break; } Hero.spd=Math.Sign(Hero.spd)*Math.Max(0,Math.Abs(Hero.spd)-Hero.frict) }
Добавлено (22.10.2012, 16:18) --------------------------------------------- spd - float переменная, значение которой изменяется при нажатии vk_left / vk_right frict - некоторый коэфф. трения dist - произвольная int переменная, указывающая, на сколько пикселей можно подняться PlaceFree - метод, возвращающий true, если столкновение в позиции (x,y) есть. Кода самого метода нет. Прошу помочь с его написанием, и разъяснением кода, указанного выше(код не мой!).
Сообщение отредактировал wcpt - Понедельник, 22 Октября 2012, 19:50 |
|
| |
wcpt | Дата: Воскресенье, 21 Октября 2012, 23:50 | Сообщение # 433 | Тема: 2д столкновения |
постоянный участник
Сейчас нет на сайте
| Что-то не понял тебя. Up и Down просто boolean переменные. Если хочешь, могу пример выложить, посмотришь что да как.
|
|
| |
wcpt | Дата: Воскресенье, 21 Октября 2012, 12:10 | Сообщение # 434 | Тема: Ищу учителя по яп Сишарп |
постоянный участник
Сейчас нет на сайте
| Пиши сюда вопросы, буду отвечать, пока собственные знания C# не иссякнут. Но если есть деньги, обратись к учителю!
Сообщение отредактировал wcpt - Воскресенье, 21 Октября 2012, 12:38 |
|
| |
wcpt | Дата: Воскресенье, 21 Октября 2012, 12:03 | Сообщение # 435 | Тема: 2д столкновения |
постоянный участник
Сейчас нет на сайте
| Да у меня все почти то же самое, проблема в том, что это не работает. Нет, сама проверка работает отлично, но что делать при столкновении? Необходимо изменить координату, чтобы перекрытие прекратилось. Мне же нужно сделать так, чтоб если в позиции, в которой будет объект в сл. шаге происходит перекрытие, то позицию не приращать. Вот как ты у себя реализовал? Вот, например, мой код:
Code Hero.NextPos = Hero.SPD * gameTime.ElapsedGameTime.Milliseconds + Hero.POS; if (IntersectPixels(HeroRect, Hero_TextData, RockRect, Rock_TextData)) { Hero.POS -= Hero.SPD; Hero.SPD = new Vector2(0, 0); Hero.Down = false; } else { Hero.POS=Hero.NextPos; Hero.POS += Hero.SPD; Hero.SPD.X -= Obj_Hero.frict * Hero.SPD.X; Hero.SPD.Y -= Obj_Hero.frict * Hero.SPD.Y; }
if (Math.Abs(Hero.SPD.X)<2e-2) Hero.SPD.X = 0;
if (myKeyboardState.IsKeyDown(Keys.Left) || myKeyboardState.IsKeyDown(Keys.Right)) { if (myKeyboardState.IsKeyDown(Keys.Left)) Hero.SPD.X -= 2e-1f;
if (myKeyboardState.IsKeyDown(Keys.Right)) Hero.SPD.X += 2e-1f; } else { if (myKeyboardState.IsKeyDown(Keys.Down)) if (!IntersectPixels(HeroRect, Hero_TextData, RockRect, Rock_TextData)) Hero.SPD.Y += 2e-1f; }
if (myKeyboardState.IsKeyDown(Keys.Up)) if (Hero.tt==0) { Hero.Down = true; if (Hero.Up == false && Hero.SPD.Y==0) { Hero.SPD.Y -= 7; Hero.Up = true; } }
if (Hero.Down) { Hero.tt += 1e-1f; Hero.SPD.Y += 8e-2f * Hero.tt * Hero.tt; } else Hero.tt = 0;
if (Hero.Up) { Hero.t += 0.1f; if (Hero.t > 1) { Hero.Down = true; Hero.Up = false; Hero.t = 0; } }
if (Hero.SPD.X > 9) Hero.SPD.X = 9; if (Hero.SPD.Y > 30) Hero.SPD.Y = 30; if (Hero.SPD.X < -9) Hero.SPD.X = -9; if (Hero.SPD.Y < -3) Hero.SPD.Y = -3;
Сообщение отредактировал wcpt - Воскресенье, 21 Октября 2012, 12:04 |
|
| |
wcpt | Дата: Суббота, 20 Октября 2012, 22:39 | Сообщение # 436 | Тема: Метод Texture.GetData() |
постоянный участник
Сейчас нет на сайте
| Вот у меня тоже этот алгоритм, только вот не в нем счастье - координаты столкновения он не возвращает!
|
|
| |
wcpt | Дата: Суббота, 20 Октября 2012, 15:40 | Сообщение # 437 | Тема: Еще раз про камеру XNA |
постоянный участник
Сейчас нет на сайте
| Блин, ну не знаю, как объяснить - сейчас пример подгоню
http://rghost.ru/41046818
Попробуй убрать матрицу Camp в кач-ве аргумента SPRBATCH.Begin и увидишь, что матрица не преобразует координаты(вершины?) прямоугольника Вообще, лучше направь свое рвение на мою тему ниже, там по-сложнее проблема
Сообщение отредактировал wcpt - Суббота, 20 Октября 2012, 15:53 |
|
| |
wcpt | Дата: Суббота, 20 Октября 2012, 13:08 | Сообщение # 438 | Тема: Примеры кода С# |
постоянный участник
Сейчас нет на сайте
| Чтение/запись лучше через using делать:
Code using (StreamWriter str = new StreamWriter(@"Путь к файлу",true(записать в этот файл, или перезаписать его)) { str.Write("Текст"); }
Сообщение отредактировал wcpt - Суббота, 20 Октября 2012, 13:15 |
|
| |
wcpt | Дата: Суббота, 20 Октября 2012, 12:40 | Сообщение # 439 | Тема: 2д столкновения |
постоянный участник
Сейчас нет на сайте
| Подскажите, как построить внятный и точный алгоритм обработки столкновений? Можно например так сделать - в LOAD занести массив цветов текстуры, сделать прямоугольник изображения, затем цикл - если цвет не равен нулю(т.е. если прозрачность не 100%) то в массив векторов2 занести точку изображения. И затем, если позиция объекта(вектор2) в следующем шаге не содержится в массиве, то для конкретных прямоугольников столкновения нет, если же содержится, то... и так далее Позицию в сл. шаге я так измерил:
Hero.NextPos = Hero.SPD * gameTime.ElapsedGameTime.Milliseconds + Hero.POS;
Теперь главные вопросы - как же все-таки реализовать это? У меня есть код попиксельного столкновения, но самая загвоздка в том, что он не позволяет остановить объект ДО столкновения, и работает только во время перекрытия, т.е. приходится после столкновения изменять координату. А лучше было бы так - если в следующей позиции столкновение - координаты не изменять. - что же делать после обнаружения столкновения? Если просто обнулять скорость - не получится хождения по кривой - а что делать, если скорость одного объекта высока по сравнению с размерами другого и он может просто оставить позади себя в сл. шаге все координаты этого другого объекта?
|
|
| |
wcpt | Дата: Суббота, 20 Октября 2012, 12:20 | Сообщение # 440 | Тема: Еще раз про камеру XNA |
постоянный участник
Сейчас нет на сайте
| Таким образом трансформируется только изображение, результат столкновения объектов один и тот же!
|
|
| |
|