Вы не вошли.

Уважаемый гость, добро пожаловать на форум: CRYMOD.NET - Портал сообщества CryENGINE. Если вы здесь впервые, то, пожалуйста, прочитайте раздел Помощь. В этом разделе можно подробно ознакомится с функционалом данной системы. Что бы использовать все возможности системы, необходимо зарегистрироваться. Для этого пройдите по ссылке и узнайте подробнее о процессе регистрации. В случае если вы уже зарегистрировались – войдите под своей учётной записью.

RJAY

Стажер

  • "RJAY" мужчина
  • "RJAY" создал эту тему

Сообщений: 260

Место жительства: Минск

Профессия: 3D художнк, программист

1

Четверг, 14 Март 2013, 17:42

Проблема с указателем на игрока

Обращаюсь к всезнающим или тем кто работал с классом CPlayer
В общем такая проблема..
после инициализации моего объекта "игрок" (player = CPlayer::GetHero();) я стал работать с ним, а точнее работать со здоровьем игрока
Но после завершения выполнения всех действий, начинались проблемы..
В общем далее вызывался деструуктор класса CPlayer и в итоге выдавал ошибку по поводу доступ не в тот участок памяти(я так понял что мой указатель затерся или ещё что-то)
так вот. Как можно избежаать ошибки? Каким классом памяти нужно объявить указатель или как освободить указатель что бы не было проблем с деструктором?
Или наоборот как уваеличть время жизни переменной?
ПС указатель инициализированн как static
ПС2 Выкидыват в Plater.cpp
ICharacterInstance *pCharacter = GetEntity()->GetCharacter(0);
[Идея] Записки путешественника
Программирование системы развития персонажа.
У всех любовь, а у меня компилируется.
Цитата великих: ...или ты из ворда компилируешь?

2

Четверг, 14 Март 2013, 18:47

А ты не используй GetHero, бери GetClientActor.
Legacy of the Yods



RJAY

Стажер

  • "RJAY" мужчина
  • "RJAY" создал эту тему

Сообщений: 260

Место жительства: Минск

Профессия: 3D художнк, программист

3

Четверг, 14 Март 2013, 18:54

А ты не используй GetHero, бери GetClientActor.

Не в этом дело, я и через static_cast получал ошибка вся та же.
[Идея] Записки путешественника
Программирование системы развития персонажа.
У всех любовь, а у меня компилируется.
Цитата великих: ...или ты из ворда компилируешь?

4

Четверг, 14 Март 2013, 19:08

А для чего и где используется указатель?
Legacy of the Yods



RJAY

Стажер

  • "RJAY" мужчина
  • "RJAY" создал эту тему

Сообщений: 260

Место жительства: Минск

Профессия: 3D художнк, программист

5

Четверг, 14 Март 2013, 19:33

А для чего и где используется указатель?

Делаю систему прокачки перса
С каждым новым лвлом должен повышаться максимальный запас здоровья на 10
Функция изменения парметров вызывается при повышении лвла.
Собственно получить указатель я получаю.
Выкидывает тогда когда идет "разрещение" объекта класса, в который отвечает за повышение уровня.
когда объявляю объект как статик все ок, но выкидывает ошибку когда закрываю двиг, что есть логично, но не могу понять почему нормально все не происходит?

-------

Ну я делаю урок тот самый по написанию этой системы, ну и вот последний пункт а никак не получается(
[Идея] Записки путешественника
Программирование системы развития персонажа.
У всех любовь, а у меня компилируется.
Цитата великих: ...или ты из ворда компилируешь?

Это сообщение было отредактировано 1 раз(а), последнее редактирование в "RJAY" (14 Март 2013, 19:39)


6

Четверг, 14 Март 2013, 20:06

Зачем static_cast? Особенный случай?

Код

1
2
3
IActor *pSelfActor=g_pGame->GetIGameFramework()->GetClientActor();
	if (!pSelfActor)
		return;


разве так не будет работать?
Legacy of the Yods



RJAY

Стажер

  • "RJAY" мужчина
  • "RJAY" создал эту тему

Сообщений: 260

Место жительства: Минск

Профессия: 3D художнк, программист

7

Четверг, 14 Март 2013, 21:56

Зачем static_cast? Особенный случай?

Код

1
2
3
IActor *pSelfActor=g_pGame->GetIGameFramework()->GetClientActor();
	if (!pSelfActor)
		return;


разве так не будет работать?


В принципе можно и через GetGero();
ибо код аналогичный тому, что ты предложил, только там тип данных приведен к CPlayer*

Код

1
2
3
4
inline CPlayer *CPlayer::GetHero()
{
	return (CPlayer*)g_pGame->GetIGameFramework()->GetClientActor();
}

И того это ошибку не исправило..
Скорее всего там проблемы с временем жизни переменных, буду разбираться в общем. Спасибо
[Идея] Записки путешественника
Программирование системы развития персонажа.
У всех любовь, а у меня компилируется.
Цитата великих: ...или ты из ворда компилируешь?

8

Четверг, 14 Март 2013, 22:02

Время жизни переменных? Никогда о таком не слышал.
Legacy of the Yods



RJAY

Стажер

  • "RJAY" мужчина
  • "RJAY" создал эту тему

Сообщений: 260

Место жительства: Минск

Профессия: 3D художнк, программист

9

Четверг, 14 Март 2013, 22:19

Время жизни переменных? Никогда о таком не слышал.

А как же классы памяти auto register static extern? Не слышал что ли?)
так вот у меня объект один с классом памяти auto и он уничтожается при выходе из блока и я так понял из-за этого беда с указателем
[Идея] Записки путешественника
Программирование системы развития персонажа.
У всех любовь, а у меня компилируется.
Цитата великих: ...или ты из ворда компилируешь?

10

Четверг, 14 Март 2013, 22:40

Всё это лажа. Делай как в движке. Там свой сборщик мусора.
Legacy of the Yods



11

Пятница, 15 Март 2013, 21:51

Код

1
2
3
CPlayer *pPlayer = static_cast<CPlayer*>(gEnv->pGame->GetIGameFramework()->GetClientActor());
	if(!pPlayer)
		return;


Не?
Legacy of the Yods



RJAY

Стажер

  • "RJAY" мужчина
  • "RJAY" создал эту тему

Сообщений: 260

Место жительства: Минск

Профессия: 3D художнк, программист

12

Понедельник, 18 Март 2013, 17:12

Все перепробовал, ошибка все же остается, возможно объект в котором этот указатель затирается и вместе с ним вылетает ошибка.
Буду пробовать исправлять или как-то локально объявлять там где используется, хз.
Кстати вопрос сейчас возник-таки. В документации есть что по поводу сериализации? или самому вникать нужно?
Мне нужно сохранять данные игрока, текущий лвл игрока, опыт, и параметры(здоровье сила и тд)
[Идея] Записки путешественника
Программирование системы развития персонажа.
У всех любовь, а у меня компилируется.
Цитата великих: ...или ты из ворда компилируешь?