Четверг, 21 Ноября 2024, 18:45

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

Меню сайта
Категории каталога
Создание игр [358]
Статьи об общих понятиях связанных с созданием игр.
Программирование [83]
Гайды по программированию на разных ЯП.
Движки и Гейммейкеры [147]
Статьи о программах для создания игр, уроки и описания.
Софт [43]
Различные программы, в том числе в помощь игроделам.
2D-графика [14]
Уроки по рисованию, растр, пиксель-арт, создание спрайтов и пр.
3D-графика [17]
Уроки по моделированию, ландшафт, модели, текстурирование и пр.
Моддинг игр [5]
Модификация компьютерных игр, создание дополнений, перевод, хакинг.
Игры [167]
Статьи об играх, в том числе и сделанных на гейммейкерах.
Разное [132]
Статьи, которые не вошли в определённые разделы.
Наш опрос
Какие жанры компьютерных игр вы предпочитаете?
Всего ответов: 2054
Главная » Статьи » Создание игр

Сохраняемся в 3D Rad.
Здесь расскажу как сделать в 3D Rad так, чтобы можно было сохранить состояние персонажа в одном из трех слотов, и даже при перезапуске проекта загрузить любой из них.

Итак мы создаем Terrain, Skybox,G-Force и Cam1StPerson.
Далее жмем Object>Add и двойной щелчок на Script. Не подумайте, что мне лень всё подробно объяснять, но дабы не морочить вам голову, я решил написать скрипт здесь, ну а ваши золотые руки его скопируют и вставят к себе.

Vector3 Player,Collect1,Collect2,Collect3,Enemy1,Enemy2;
string Quicksave1=".\\quicksave1.txt";
string Quicksave2=".\\quicksave2.txt";
string Quicksave3=".\\quicksave3.txt";
int FileHandle,Wait,Counter,Health,Collected1,Collected2,Collected3;

void Main()
{

//Stage 1 - Set all variables to desired initial value and read fish locations
//into vectors.

if(iInitializing())
{
Wait=0;
Counter=0;
Collected1=0;
Collected2=0;
Collected3=0;
iObjectLocation(OBJ_220,Player);
iObjectLocation(OBJ_0,Collect1);
iObjectLocation(OBJ_22,Collect2);
iObjectLocation(OBJ_44,Collect3);
}

iObjectLocation(OBJ_220,Player);

//Stage 2 - Handle visibility of collectable fish. If a file is loaded in which all
//fish have already been collected, none will be visible.

if(Collected1==0){
iObjectShow(OBJ_0);
}
else{
iObjectHide(OBJ_0);
}
if(Collected2==0){
iObjectShow(OBJ_22);
}
else{
iObjectHide(OBJ_22);
}
if(Collected3==0){
iObjectShow(OBJ_44);
}
else{
iObjectHide(OBJ_44);
}

//Stage 3 - Based on the same 'collected' variables as used above, determine whether the
//player can acquire a fish.

if(iVectorLength(Player-Collect1)<1 && Collected1==0)
{
iObjectHide(OBJ_0);
iObjectStart(OBJ_66);
Collected1=1;
}

if(iVectorLength(Player-Collect2)<1 && Collected2==0)
{
iObjectHide(OBJ_22);
iObjectStart(OBJ_66);
Collected2=1;
}

if(iVectorLength(Player-Collect3)<1 && Collected3==0)
{
iObjectHide(OBJ_44);
iObjectStart(OBJ_66);
Collected3=1;
}

//Stage 4 - Counter used for hiding saving/loading text after it is visible for 1 second.

if(Wait==2)
{
Counter++;
}
if(Counter==60)
{
Counter=0;
Wait=0;
iObjectHide(OBJ_176);
}

//Stage 5 - Define quicksaving with keys F1,F2,F3. Use the 'wait' variable to ensure the system
//completes a save before another can be made.

if(iKeyDown(iKeyCode("DIK_F1")) && Wait==0)
{
Wait=1;
FileHandle=iFileWriteOpen(Quicksave1);
if(FileHandle!=-1)
{
iFileValueWrite(FileHandle,Player.x,true);
iFileValueWrite(FileHandle,Player.y+2,true);
iFileValueWrite(FileHandle,Player.z,true);
iFileValueWrite(FileHandle,Health,true);
iFileValueWrite(FileHandle,Collected1,true);
iFileValueWrite(FileHandle,Collected2,true);
iFileValueWrite(FileHandle,Collected3,true);
iFileClose(FileHandle);
iObjectTextSet(OBJ_176,"Quicksaving in slot 1...");
iObjectShow(OBJ_176);
Wait=2;
}
}

if(iKeyDown(iKeyCode("DIK_F2")) && Wait==0)
{
Wait=1;
FileHandle=iFileWriteOpen(Quicksave2);
if(FileHandle!=-1)
{
iFileValueWrite(FileHandle,Player.x,true);
iFileValueWrite(FileHandle,Player.y+2,true);
iFileValueWrite(FileHandle,Player.z,true);
iFileValueWrite(FileHandle,Health,true);
iFileValueWrite(FileHandle,Collected1,true);
iFileValueWrite(FileHandle,Collected2,true);
iFileValueWrite(FileHandle,Collected3,true);
iFileClose(FileHandle);
iObjectTextSet(OBJ_176,"Quicksaving in slot 2...");
iObjectShow(OBJ_176);
Wait=2;
}
}

if(iKeyDown(iKeyCode("DIK_F3")) && Wait==0)
{
Wait=1;
FileHandle=iFileWriteOpen(Quicksave3);
if(FileHandle!=-1)
{
iFileValueWrite(FileHandle,Player.x,true);
iFileValueWrite(FileHandle,Player.y+2,true);
iFileValueWrite(FileHandle,Player.z,true);
iFileValueWrite(FileHandle,Health,true);
iFileValueWrite(FileHandle,Collected1,true);
iFileValueWrite(FileHandle,Collected2,true);
iFileValueWrite(FileHandle,Collected3,true);
iFileClose(FileHandle);
iObjectTextSet(OBJ_176,"Quicksaving in slot 3...");
iObjectShow(OBJ_176);
Wait=2;
}
}

//Stage 6 - Define quickloading with keys F4,F5,F6. Observe the order in which the variables
//are written/read to/from the txt file.

if(iKeyDown(iKeyCode("DIK_F4")) && Wait==0)
{
Wait=1;
FileHandle=iFileReadOpen(Quicksave1);
if(FileHandle!=-1)
{
Player.x=iFileValueRead(FileHandle);
Player.y=iFileValueRead(FileHandle);
Player.z=iFileValueRead(FileHandle);
OUT_154=iFileValueRead(FileHandle);
Collected1=iFileValueRead(FileHandle);
Collected2=iFileValueRead(FileHandle);
Collected3=iFileValueRead(FileHandle);
iFileClose(FileHandle);
iObjectTextSet(OBJ_176,"Quickloading from slot 1...");
iObjectShow(OBJ_176);
iObjectHide(OBJ_220);
Wait=2;
iObjectLocationSet(OBJ_220,Player);
iObjectShow(OBJ_220);
}
}

if(iKeyDown(iKeyCode("DIK_F5")) && Wait==0)
{
Wait=1;
FileHandle=iFileReadOpen(Quicksave2);
if(FileHandle!=-1)
{
Player.x=iFileValueRead(FileHandle);
Player.y=iFileValueRead(FileHandle);
Player.z=iFileValueRead(FileHandle);
OUT_154=iFileValueRead(FileHandle);
Collected1=iFileValueRead(FileHandle);
Collected2=iFileValueRead(FileHandle);
Collected3=iFileValueRead(FileHandle);
iFileClose(FileHandle);
iObjectTextSet(OBJ_176,"Quickloading from slot 2...");
iObjectShow(OBJ_176);
iObjectHide(OBJ_220);
Wait=2;
iObjectLocationSet(OBJ_220,Player);
iObjectShow(OBJ_220);
}
}

if(iKeyDown(iKeyCode("DIK_F6")) && Wait==0)
{
Wait=1;
FileHandle=iFileReadOpen(Quicksave3);
if(FileHandle!=-1)
{
Player.x=iFileValueRead(FileHandle);
Player.y=iFileValueRead(FileHandle);
Player.z=iFileValueRead(FileHandle);
OUT_154=iFileValueRead(FileHandle);
Collected1=iFileValueRead(FileHandle);
Collected2=iFileValueRead(FileHandle);
Collected3=iFileValueRead(FileHandle);
iFileClose(FileHandle);
iObjectTextSet(OBJ_176,"Quickloading from slot 3...");
iObjectShow(OBJ_176);
iObjectHide(OBJ_220);
Wait=2;
iObjectLocationSet(OBJ_220,Player);
iObjectShow(OBJ_220);
}
}

//Stage 7 - Constantly print out health value and score=collected1+collected2+collected3

Health=IN_154;
OUT_88=Collected1+Collected2+Collected3;
OUT_132=Health;
}
___________________________________________________
После скрипта, создаем TextPrint, и пишем в нем save/load status, и для красоты размещаем в верхнем левом углу.Так же привязываем его к скрипту. (сo скриптом должны быть связанны Cam1StPerson;TextPrint)
___________________________________________________
Итак, теперь создаем три "рыбки", Skinmesh, ну и ставим недалеко друг от друга (по желанию).(Связываем их сo скриптом)
___________________________________________________
Далее жмем опять Object>Add>Counter;
В параметрах Counter делаем вот что:
Initial Value [100]
Increment (can be negative) [ -1 ]
Wrapping/clamping range [ 0 ] [100] [Clamp]
Cross-project file [ ] [Read at startup and write on exit]

Привязываем Counter к скрипту.
__________________________________________________
Создаем два RigidBody, ставим в разных местах и связываем с Cam1StPerson.
Теперь добавляем EventOnContact, и привязываем к нему Cam1StPerson; RigidBody1;RigidBody2;Counter.
Открываем настройки EventOnContact:
Cam1StPerson________ MONITOR
RigidBody1_____________________ MONITOR
Counter____________________ START ON CONTACT
RigidBody2_____________________ MONITOR

__________________________________________________
Завершающий этап:
Создаем TextPrint, в нем пишем Health (размещаем примерно в вверхнем правом углу)
Создаем ValuePrint, ставим чуть правее от health и связываем с скриптом.(в настройках IGNORE к скрипту)
То же самое со Score.
Создаем TextPrint, в нем пишем Score и размещаем под Health.
Создаем ValuePrint, ставим чуть првее от Score и связываем сo скриптом. (в настройках IGNORE к скрипту)

Далее добавляем SoundEffect и привзываем к скрипту.
Всё!

Вот демка, где сделанно все вышенаписанное.

Категория: Создание игр | Добавил: Don_Vito (24 Августа 2010)
Просмотров: 10762 | Комментарии: 6 | Рейтинг: 4.4/7 |
Теги: 3D. Save, Load., rad, 3D Rad
Дополнительные опции:
Также если вы считаете, что данный материал мог быть интересен и полезен кому-то из ваших друзей, то вы бы могли посоветовать его, отправив сообщение на e-mail друга:

Игровые объявления и предложения:
Если вас заинтересовал материал «Сохраняемся в 3D Rad.», и вы бы хотели прочесть что-то на эту же тему, то вы можете воспользоваться списком схожих материалов ниже. Данный список сформирован автоматически по тематическим меткам раздела. Предлагаются такие схожие материалы: Если вы ведёте свой блог, микроблог, либо участвуете в какой-то популярной социальной сети, то вы можете быстро поделиться данной заметкой со своими друзьями и посетителями.

Всего комментариев: 6
+2-
4 Don_Vito   (24 Января 2011 11:23) [Материал]
Don_VitoОбоснуй, Сэм. wink

+-1-
6 SaM_   (19 Апреля 2011 22:23) [Материал]
SaM_Хоть бы логи поудалял... wink
В любом случае, надо было обьяснить принцип роботы, я лично не сразу разобрался, а скопировать и вставить любой сможет...

+-1-
3 SaM_   (30 Августа 2010 16:48) [Материал]
SaM_Безполезная статья, ты не рассказал сути скрипта, а в тупую скопировал его из чужой демки... angry

+0-
5 SEFA1370   (25 Марта 2011 15:20) [Материал]
SEFA1370Главное что работает!

+2-
2 Don_Vito   (25 Августа 2010 00:52) [Материал]
Don_VitoДа и кстати. Скриншоты чего именно? =)

+2-
1 Don_Vito   (24 Августа 2010 02:58) [Материал]
Don_VitoСкрины добавлю чуть позже, если надо. smile
Ответ: Добавь, пожалуйста, надо!

Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Поиск по сайту
10 случ. движков
  • GINCS Studio
  • Diligent
  • Luxe Engine
  • Wicked Engine
  • GameSalad
  • RPG Studio
  • Andorra 2D
  • Quest
  • Bitty
  • vbGORE
  • Друзья сайта
    Игровой форум GFAQ.ru Перевод консольных игр
    Все права сохранены. GcUp.ru © 2008-2024 Рейтинг