Понедельник, 09 Ноября 2026, 05:21

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
Результаты поиска
VuvkДата: Вторник, 18 Июля 2017, 09:19 | Сообщение # 141 | Тема: Затирание данных перед освобождением
заслуженный участник
Сейчас нет на сайте
Цитата Otinagi ()
Хотя, если не изменяет память, даже Квейк 3 писался на Си, а не Си++. Так что, народ справлялся как-то и без ООП (:

Во всех движках idTech < 4 весьма себе объектно-ориентированный стиль. В рамках Си, конечно.

Добавлено (18 июля 2017, 09:19)
---------------------------------------------
Цитата Otinagi ()
Для PC, иногда, да; для контроллеров - определённо нет.

Подскажи, как специалист, почему? Или у тебя доступ не последовательный, а по номеру в массиве? Если так, то тут спору нет - оно и на ПК медленнее. Я в своем проекте остановился на списках, потому что мне нужно быстро то добавлять, то удалять элементы, а динамические массивы в этой ситуации - это грустно. Плюс мне нужно всегда проходить от первого элемента к последнему и обрабатывать их, нет необходимости дергать что-то в центре, например (либо оооочень редко).


Сообщение отредактировал Vuvk - Вторник, 18 Июля 2017, 09:20
VuvkДата: Вторник, 18 Июля 2017, 04:48 | Сообщение # 142 | Тема: Old Life - Пишу ММО
заслуженный участник
Сейчас нет на сайте

Клиент на Юнити, а сервер на чем пишешь? Любопытно же.


Сообщение отредактировал Vuvk - Вторник, 18 Июля 2017, 06:19
VuvkДата: Понедельник, 17 Июля 2017, 11:40 | Сообщение # 143 | Тема: Alarm и его применение в столкновении
заслуженный участник
Сейчас нет на сайте
Сейчас поглядел что там в гамаке, а там нет разделения на collision_enter и collision_exit, так что если ты это запихнул в collision (при чем всё сразу)
Цитата Reker ()
if (!canPlayerDamage)
{
alarm [0] = room_speed;
canPlayerDamage = true;
}
canPlayerDamage = false;
alarm[0] = -1;

оно не будет работать, ахах.
попробуй убрать туда же в таймер
Код

hp-=10;
canPlayerDamage = false;
alarm[0] = -1;


VuvkДата: Понедельник, 17 Июля 2017, 11:28 | Сообщение # 144 | Тема: Для души
заслуженный участник
Сейчас нет на сайте
Цитата EchoIT ()
агришься на обычную критику

Критика это когда тебе конкретно говорят, с чем есть проблемы и что желательно поправить. А вот когда тебе говорят, что у тебя по умолчанию всё говно и лучше вообще брось это дело и никогда не берись - это не критика (это я о своём печальном опыте).

Цитата EchoIT ()
понимаешь, он просто вроде бы взрослый человек, который и вести себя, в силу своего возраста, должен адекватно. Зачем так остро реагировать на всяких школьников (условно) с форума?

Со всем согласен.
VuvkДата: Понедельник, 17 Июля 2017, 11:24 | Сообщение # 145 | Тема: Alarm и его применение в столкновении
заслуженный участник
Сейчас нет на сайте
Чего куда поставить? У тебя в будильнике это должно остаться:
Цитата Reker ()

в Alarm[0]
hp-=10;

в Create
canPlayerDamage = false;
VuvkДата: Понедельник, 17 Июля 2017, 11:11 | Сообщение # 146 | Тема: Alarm и его применение в столкновении
заслуженный участник
Сейчас нет на сайте
Цитата ASH2 ()
уменьшение количества вычислений в шаге сомнительно, так как он сам-то как-то должен свои будильники обсчитывать...

Это уже внутренняя реализация гамака, которая однозначно быстрее будет работать скриптов, которые ты пишешь.
Цитата ASH2 ()
в Create delta = fps/room_speed; не пойдёт

ну ОК. Но будильники всё равно кошерней


Сообщение отредактировал Vuvk - Понедельник, 17 Июля 2017, 11:13
VuvkДата: Понедельник, 17 Июля 2017, 11:09 | Сообщение # 147 | Тема: Alarm и его применение в столкновении
заслуженный участник
Сейчас нет на сайте
Reker, это переменная-счетчик. Так он имитирует будильник.

Добавлено (17 июля 2017, 11:09)
---------------------------------------------
И кстати тогда хотя бы так сделать:
в Create
Код

nTimer = 0;
delta = fps/room_speed;  // для сокращения количества постоянных расчетов

в Step
Код

nTimer += delta;
if (nTimer >= room_speed)
{
  hp -= 10;
  nTimer -= room_speed;  // для равномерного хода
}


Сообщение отредактировал Vuvk - Понедельник, 17 Июля 2017, 11:11
VuvkДата: Понедельник, 17 Июля 2017, 11:02 | Сообщение # 148 | Тема: Помогите найти ошибку
заслуженный участник
Сейчас нет на сайте
что это за ад вообще?

В этом месте что ты хочешь увидеть - проверку двух условий или у тебя присвоение по условию слева? Нафига тогда открывающая скобка?
Код
if (sprite_index=SprLeft)(sprite_index=mSprLeft)

VuvkДата: Понедельник, 17 Июля 2017, 10:54 | Сообщение # 149 | Тема: Alarm и его применение в столкновении
заслуженный участник
Сейчас нет на сайте
Мое знакомство с GM закончилось на 8 версии, но...
При входе в столкновение проверять какую-то переменную:
Код

if (!canPlayerDamage)
{
  alarm [0] = room_speed;
  canPlayerDamage = true;
}

А при выходе из столкновения:
Код

canPlayerDamage = false;
alarm[0] = -1;

ASH2, предпочтительней использовать будильники, сокращая количество вычислений в шаге. /* могу наврать, но по логике вещей оно так */


Сообщение отредактировал Vuvk - Понедельник, 17 Июля 2017, 10:55
VuvkДата: Понедельник, 17 Июля 2017, 10:29 | Сообщение # 150 | Тема: Затирание данных перед освобождением
заслуженный участник
Сейчас нет на сайте
Цитата Otinagi ()
использование всяческих ООП-механизмов не думаю, что хорошо для Си

Без них разработка игр превращается в целую эпопею. Хотя и с ними не всё так гладко )

Цитата Otinagi ()
Ещё и с NULL надо быть внимательным. В некоторых стандартах для систем с повышенной отказоустойчывастью советуют после освобождения памяти или создании указателя ручками ещё указателю NULL присваивать, иначе проверка на NULL может потом не сработать.

Делаю это всегда. Без этого в моем проекте никак...

Цитата Otinagi ()
у MISRA-C много заметок по динамической работе с памятью

За наводку плюсик однозначно.

Добавлено (17 июля 2017, 10:29)
---------------------------------------------

Цитата Otinagi ()
У меня было нечто вроде списка задач, и это было сделано как массив структур

Думаю, что для списка надо было реализовать список, а не массив использовать. Это бы решило ряд проблем.
VuvkДата: Понедельник, 17 Июля 2017, 06:04 | Сообщение # 151 | Тема: Для души
заслуженный участник
Сейчас нет на сайте
EchoIT, пообщался я с ним "вживую" в ТС и на удивление это оказался вполне себе обычный человек, наивный в чем-то, но всё же человек, а не тролль. Сам он здешних троллями считает. Но это вполне очевидно.
HerrPotapov, это скорее похоже на то, что вы нашли "мальчика для битья".
Я как-то попадал в подобную ситуацию. Написал на другом форуме с криками о помощи, а в ответ мне толпой начали писать всякие каки, что типа проект ГМО и сам я ГМО. Ясен-красен в защиту я поогрызался, а в ответку полетели минусы. Я тут же ретировался, т.к. кому-то что-то доказывать это дохлый номер. Sandar, кстати, подумай над этим.
Я не в чью-то защиту сейчас пишу. Просто наблюдаю картинку, свойственную для рунета, когда кого-то затюкать это в порядке вещей.
Sandar, а ещё я, если честно, в успех вашего проекта не верю, но поживем-увидим. Просто я натыкался на другого персонажа-организатора, который вдохновившись историями успешных стартапов решил, что сможет также. Влил неплохую сумму в очередного убийцу Сталкера (гораздо больше, чем ты намерен выделить), а выхлоп нулевой. Потом, когда деньги кончились, он решил набирать энтузиастов. Как итог - текучке кадров можно только позавидовать, а прогресс стремится к нулю. Хотят найти инвестора, но кто будет инвестировать проект, который тянется уже 8 лет, кажется, а даже демки полноценной до сих пор нет! Его тема где-то здесь на форуме тоже болтается.


Сообщение отредактировал Vuvk - Понедельник, 17 Июля 2017, 07:01
VuvkДата: Воскресенье, 16 Июля 2017, 22:15 | Сообщение # 152 | Тема: Для души
заслуженный участник
Сейчас нет на сайте
Зачем вы его минусуете? Самоутверждаетесь, что ли? Горбатого только могила исправит, как говорится.
VuvkДата: Воскресенье, 16 Июля 2017, 08:56 | Сообщение # 153 | Тема: Затирание данных перед освобождением
заслуженный участник
Сейчас нет на сайте
Цитата
указатели на виртуальные функции и которые да, действительно, мемсетом обнулять немножко глупо.

С этим все ясно. Есть ли какие-то ситуации, когда не глупо - вот в чем вопрос. Просто разобраться хочу. %)

Добавлено (16 июля 2017, 08:56)
---------------------------------------------
Похоже в итоге натолкнулся на "неглупую" ситуацию, когда, по-видимому, не обойтись хотя бы без частичного затирания.
Опишу вкратце. Я пишу на Си, но всячески имитирую ООП-механизмы. Для определения к какому "классу" относится созданный объект (на основе структур) в них зашит в заголовок идентификатор (у каждого свой). Например, текстура:
Код

#define TXR_IDENT 0x5F525854   // 'T', 'X', 'R', '_' = 1599232084 = 0x5F525854

Проверка очевидна:
Код

bool ObjectIsTexture(void* object)
{
    if (object == NULL)
        return false;

    if (*((uint32*)object) == TXR_IDENT)
        return true;

    return false;
}

Есть различные структуры, содержащие указатели на текстуру для использования. В случае, если текстура удалена, её нельзя использовать, как ресурс. Для этого производится такая проверка в момент обращения к ней:
Код

if (texture != NULL)
{
  if (ObjectIsTexture (texture))
  {
    /* использовать */
  }
  else
    texture = NULL;
}

Но если её не затереть (хотя бы идентификатор), то при обращении по адресу в мусоре может остаться верный идентификатор и всё, пиши пропало.
Такие соображения. Если у кого есть что конструктивного заметить, я только за.


Сообщение отредактировал Vuvk - Воскресенье, 16 Июля 2017, 09:06
VuvkДата: Суббота, 15 Июля 2017, 11:45 | Сообщение # 154 | Тема: Ищем сотрудников для работы над проектом "Reign of Guilds"
заслуженный участник
Сейчас нет на сайте
Отписал вам на почту
VuvkДата: Суббота, 15 Июля 2017, 09:23 | Сообщение # 155 | Тема: Затирание данных перед освобождением
заслуженный участник
Сейчас нет на сайте
К счастью, в языке C ссылок нет))
За ответ спасибо.
VuvkДата: Суббота, 15 Июля 2017, 08:31 | Сообщение # 156 | Тема: Затирание данных перед освобождением
заслуженный участник
Сейчас нет на сайте
Всем привет! Вопрос у меня не только по С/С++, но и вообще. Однако т.к. я задумался над этим, когда писал код на Си, то и разместил его здесь. Вопрос ламерский )
Итак, суть:
есть любая структура с несколькими полями -
Код

typedef struct
{
  float x, y, z;
  int anything;
} example_s;

В каком-то участке программы я её динамически создал:
Код

example_s* example = (example_s*)calloc(1, sizeof(example_s));

/* что-то с ней сделал и решил удалить */

memset(example, 0, sizeof(example_s));      /* вопрос */
free(example);
example = NULL;


Вопрос следующий - есть ли какой-то смысл затирать (выставлять нули) все поля перед удалением структуры? Улучшает ли это в последующем какие-то процессы выделения памяти или в данном случае это не имеет значения? Читал, что для безопасности можно затирать пароли, логины, но вот в противовес так же читал, что компилятор с флагами оптимизации вырезает memset за ненадобностью, т.к. это бесполезно в данной ситуации. Но меня интересует не скрытие от злоумышленников каких-то данных, а в принципе как оно по фэн-шую.

Спасибо за внимание.


Сообщение отредактировал Vuvk - Вторник, 18 Июля 2017, 09:22
VuvkДата: Пятница, 14 Июля 2017, 17:33 | Сообщение # 157 | Тема: Поворот к платформе
заслуженный участник
Сейчас нет на сайте
Рейкаст -> взять нормаль в точке столкновения -> повернуть муху
Ну как-то так.
VuvkДата: Пятница, 14 Июля 2017, 17:26 | Сообщение # 158 | Тема: [Java/Android] BuildHabit
заслуженный участник
Сейчас нет на сайте
VuvkДата: Пятница, 14 Июля 2017, 14:01 | Сообщение # 159 | Тема: Проблема с Рэгдоллом
заслуженный участник
Сейчас нет на сайте
Grisha56, а это значит, что с самим префабом куклы что-то не так. Например, одна из частей тела static.
VuvkДата: Пятница, 14 Июля 2017, 13:53 | Сообщение # 160 | Тема: Kingstagram [PC, IOs, Android]
заслуженный участник
Сейчас нет на сайте
Видимо их
Поиск:

Все права сохранены. GcUp.io © 2008-2026