Понедельник, 25 Ноября 2024, 03:39

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

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Требуется помощь со скриптом.
Black_RacerДата: Воскресенье, 29 Мая 2011, 21:18 | Сообщение # 1
частый гость
Сейчас нет на сайте
Ребят, какой командой дописать в данном скрипте радиус ограничения отдаления камеры, и еще вопрос необходимо чтобы этот скрипт активировался только при нажатии на определенный объект (тоесть чтобы камера вращалась только с зажатой кнопкой мыши на автомобиле)?

Code
Quaternion CameraOrientation;
Vector3 CharacterLocation,CameraLocation;
int Heightoffset;
float Radius,lastMouseZ;

void Main()
{

    if (iInitializing())
    {  
       Heightoffset=0;
       iMouseLookSet(24,157);
       iObjectLocation(OBJ_22,CharacterLocation);
       Radius=4;
    }

if(Radius>=3.2){
if(iMouseZ(false)>lastMouseZ)Radius-=0.5;}
if(iMouseZ(false)<lastMouseZ)Radius+=0.5;
lastMouseZ=iMouseZ(false);

iObjectLocation(OBJ_22,CharacterLocation);
iMouseLookYRangeSet(80,-0);
CameraLocation.x=CharacterLocation.x+Radius*iFloatSin(-iMouseLookY())*iFloatSin(90-iMouseLookX());
CameraLocation.y=CharacterLocation.y+Heightoffset+Radius*iFloatCos(90-iMouseLookX());
CameraLocation.z=CharacterLocation.z+Radius*-iFloatCos(iMouseLookY())*iFloatSin(90-iMouseLookX());
iObjectLocationSet(OBJ_0,CameraLocation);
iQuaternionFromEulerAngles(CameraOrientation,iMouseLookX(),iMouseLookY(),0,"xyz");
iObjectOrientationSet(OBJ_0,CameraOrientation);

}
CaptainHuntДата: Воскресенье, 29 Мая 2011, 22:33 | Сообщение # 2
был не раз
Сейчас нет на сайте
Вообще-то трудно понять, что это за проект. Но, если я правильно понял, то нужно менять переменную Radius.
Попробуй перед строкой
Code
if(Radius>=3.2){
поставить:

if(Radius>=10) Radius=10;// 10 - ограничение; поставь вместо 10-ти ограничение, которое нужно тебе.

Второе тоже сделать нетрудно; если никто не ответит, я отвечу позже.


WorldSim3D: сделай 3D игру на С++/FreeBasic/D для PC Windows/Linux. Программируй в удовольствие, а не "в тягость"! Make your project with pleasure, not with strain! Ознакомиться

Сообщение отредактировал Alek - Воскресенье, 29 Мая 2011, 22:36
Black_RacerДата: Понедельник, 30 Мая 2011, 17:11 | Сообщение # 3
частый гость
Сейчас нет на сайте
Alek
Спасибо большое smile
Помогло!
Теперь осталось решить вопрос с захватом вращаемого объекта.
CaptainHuntДата: Понедельник, 30 Мая 2011, 21:08 | Сообщение # 4
был не раз
Сейчас нет на сайте
Пожалуйста, Black_Racer.
Quote
Теперь осталось решить вопрос с захватом вращаемого объекта.

У тебя автомобиль - RigidBody или RigidBody + SkinMesh ?


WorldSim3D: сделай 3D игру на С++/FreeBasic/D для PC Windows/Linux. Программируй в удовольствие, а не "в тягость"! Make your project with pleasure, not with strain! Ознакомиться
Black_RacerДата: Вторник, 31 Мая 2011, 10:47 | Сообщение # 5
частый гость
Сейчас нет на сайте
Alek
автомобиль, RigidBody + SkinMesh


Сообщение отредактировал Black_Racer - Вторник, 31 Мая 2011, 10:47
CaptainHuntДата: Четверг, 02 Июня 2011, 09:03 | Сообщение # 6
был не раз
Сейчас нет на сайте
Посмотри стандартный проект MouseOverSkinMesh.3dr
Если не разберёшься, я помогу.


WorldSim3D: сделай 3D игру на С++/FreeBasic/D для PC Windows/Linux. Программируй в удовольствие, а не "в тягость"! Make your project with pleasure, not with strain! Ознакомиться
Black_RacerДата: Воскресенье, 19 Июня 2011, 12:19 | Сообщение # 7
частый гость
Сейчас нет на сайте
Alek

Я все еще не решил эту проблему sad
roman453848Дата: Воскресенье, 19 Июня 2011, 19:59 | Сообщение # 8
частый гость
Сейчас нет на сайте
и еще вопрос необходимо чтобы этот скрипт активировался только при нажатии на определенный объект (тоесть чтобы камера вращалась только с зажатой кнопкой мыши на автомобиле)?
чо сложного то добавляешь обьект кнопку соеденяешь со скриптом ставь условие
if(IN_номер кнопки >0)
{
if (iInitializing())
{
Heightoffset=0;
iMouseLookSet(24,157);
iObjectLocation(OBJ_22,CharacterLocation);
Radius=4;
}

if(Radius>=3.2){
if(iMouseZ(false)>lastMouseZ)Radius-=0.5;}
if(iMouseZ(false)<lastMouseZ)Radius+=0.5;
lastMouseZ=iMouseZ(false);

iObjectLocation(OBJ_22,CharacterLocation);
iMouseLookYRangeSet(80,-0);
CameraLocation.x=CharacterLocation.x+Radius*iFloatSin(-iMouseLookY())*iFloatSin(90-iMouseLookX());
CameraLocation.y=CharacterLocation.y+Heightoffset+Radius*iFloatCos(90-iMouseLookX());
CameraLocation.z=CharacterLocation.z+Radius*-iFloatCos(iMouseLookY())*iFloatSin(90-iMouseLookX());
iObjectLocationSet(OBJ_0,CameraLocation);
iQuaternionFromEulerAngles(CameraOrientation,iMouseLookX(),iMouseLookY(),0,"xyz");
iObjectOrientationSet(OBJ_0,CameraOrientation);
}
}


Самой кратой чубак
CaptainHuntДата: Вторник, 21 Июня 2011, 16:21 | Сообщение # 9
был не раз
Сейчас нет на сайте
Black_Racer, если решение roman453848 не подойдёт (я его не проверял на работоспособность), то позже напишу. Извиняюсь, что пообещал, но медлю. sad

Итак, давай уточним:

У тебя есть скрипт, который должен активироваться, когда мышь наводишь (и зажимаешь кнопкой) на машину. Правильно я понял ?

Добавлено (21.06.2011, 16:21)
---------------------------------------------
Black_Racer, я сделал демку.

Скачать здесь
Некоторые пояснения:
- у объекта SkinMesh машины должна быть галочка на свойстве 'detect mouse-over event';
- в демке 2 скрипта: один - твой (для вращения), другой для активации 1-го скрипта;
- во 2-м скрипте (который активирует 1-ый) у свойства 'Working at start' не должно быть галочки;
- iMouseButtonDown(0) - для левой кнопки мышки, (1) для правой и (2) для средней;
- в этой демке скрипт для вращения - под номером 44 - (OBJ_44), ты поставь номер, под которым он у тебя (это ты, наверное, знаешь); также и у других объектов - поменяй номера, если отличаются от номеров в твоём проекте.

Код доплнительного скрипта (который нужен для активации скрипта вращения):

Code
void Main()
{
    if(iMouseButtonDown(0) && IN_25>0) iObjectStart(OBJ_44);
// задаём 2 условия: 1) (iMouseButtonDown(0)) - нажата ли левая кнопка мыши
// 2) (IN_25>0) - находится ли курсор мыши над SkinMesh
// если оба условия выполняются, то iObjectStart(OBJ_44) - активируем
// скрипт для вращения камеры
else // если оба условия не выполняются
iObjectStop(OBJ_44);// остановить работу скрипта для вращения камеры
}


WorldSim3D: сделай 3D игру на С++/FreeBasic/D для PC Windows/Linux. Программируй в удовольствие, а не "в тягость"! Make your project with pleasure, not with strain! Ознакомиться

Сообщение отредактировал Alek - Вторник, 21 Июня 2011, 16:44
roman453848Дата: Вторник, 21 Июня 2011, 20:56 | Сообщение # 10
частый гость
Сейчас нет на сайте
зачем 2 скрипта? можно все в 1
Quaternion CameraOrientation;
Vector3 CharacterLocation,CameraLocation;
int Heightoffset;
float Radius,lastMouseZ;

void Main()
{

if(iMouseButtonDown(0) && IN_25>0)
{
if (iInitializing())
{
Heightoffset=0;
iMouseLookSet(24,157);
iObjectLocation(OBJ_22,CharacterLocation);
Radius=4;
}

if(Radius>=3.2){
if(iMouseZ(false)>lastMouseZ)Radius-=0.5;}
if(iMouseZ(false)<lastMouseZ)Radius+=0.5;
lastMouseZ=iMouseZ(false);

iObjectLocation(OBJ_22,CharacterLocation);
iMouseLookYRangeSet(80,-0);
CameraLocation.x=CharacterLocation.x+Radius*iFloatSin(-iMouseLookY())*iFloatSin(90-iMouseLookX());
CameraLocation.y=CharacterLocation.y+Heightoffset+Radius*iFloatCos(90-iMouseLookX());
CameraLocation.z=CharacterLocation.z+Radius*-iFloatCos(iMouseLookY())*iFloatSin(90-iMouseLookX());
iObjectLocationSet(OBJ_0,CameraLocation);
iQuaternionFromEulerAngles(CameraOrientation,iMouseLookX(),iMouseLookY(),0,"xyz");
iObjectOrientationSet(OBJ_0,CameraOrientation);
}
}
вот получится тоже самое токо меньше писанины


Самой кратой чубак

Сообщение отредактировал roman453848 - Вторник, 21 Июня 2011, 20:58
Black_RacerДата: Среда, 22 Июня 2011, 13:30 | Сообщение # 11
частый гость
Сейчас нет на сайте
Спасибо большое ребята, но всеже скрипт работает не так как надо, еще хотелось бы чтобы была инерция у камеры, камера должна врощатся как в Undeground, и рывки очень раздражают.

Скрин с моего проекта:


Меню игрушки. именно там должна вращаться камера вокруг авто!


Сообщение отредактировал Black_Racer - Среда, 22 Июня 2011, 13:31
roman453848Дата: Среда, 22 Июня 2011, 14:50 | Сообщение # 12
частый гость
Сейчас нет на сайте
Quaternion CameraOrientation;
Vector3 CharacterLocation,CameraLocation;
int Heightoffset;
float Radius,lastMouseZ;
bool menu = false;
void Main()
{
if(iMouseButtonDown(0) && IN_25>0)
if(menu == true) // а вот как menu станет true подумай сам =) поставь условие что когда включено меню тоесть например нажал на кнопку меню включилось то
menu = true;
{
if (iInitializing())
{
Heightoffset=0;
iMouseLookSet(24,157);
iObjectLocation(OBJ_22,CharacterLocation);
Radius=4;
}

if(Radius>=3.2){
if(iMouseZ(false)>lastMouseZ)Radius-=0.5;}
if(iMouseZ(false)<lastMouseZ)Radius+=0.5;
lastMouseZ=iMouseZ(false);

iObjectLocation(OBJ_22,CharacterLocation);
iMouseLookYRangeSet(80,-0);
CameraLocation.x=CharacterLocation.x+Radius*iFloatSin(-iMouseLookY())*iFloatSin(90-iMouseLookX());
CameraLocation.y=CharacterLocation.y+Heightoffset+Radius*iFloatCos(90-iMouseLookX());
CameraLocation.z=CharacterLocation.z+Radius*-iFloatCos(iMouseLookY())*iFloatSin(90-iMouseLookX());
iObjectLocationSet(OBJ_0,CameraLocation);
iQuaternionFromEulerAngles(CameraOrientation,iMouseLookX(),iMouseLookY(),0,"xyz");
iObjectOrientationSet(OBJ_0,CameraOrientation);
}

}

Добавлено (22.06.2011, 14:46)
---------------------------------------------
еще хотелось бы чтобы была инерция у камеры, камера должна врощатся как в Undeground я не играл это типо зажимаешь кнопку поворачиваешь а когда отпускаешь то камера еще некоторое время поворачивает?

Добавлено (22.06.2011, 14:50)
---------------------------------------------
вообще обьясни как у тебя включается гонка ?


Самой кратой чубак
Black_RacerДата: Среда, 22 Июня 2011, 15:37 | Сообщение # 13
частый гость
Сейчас нет на сайте
Quote
еще хотелось бы чтобы была инерция у камеры, камера должна врощатся как в Undeground я не играл это типо зажимаешь кнопку поворачиваешь а когда отпускаешь то камера еще некоторое время поворачивает?

да она не останавливается моментом, имеет небольшую инерцию вращения.

Добавлено (22.06.2011, 14:50)

Quote
вообще обьясни как у тебя включается гонка ?


обычная навигация по меню. (кнопок меню нет на скрине)

при активации скрипта пишет Error IN_25 is not declarated (где я не поставил связь?)


Сообщение отредактировал Black_Racer - Среда, 22 Июня 2011, 15:40
roman453848Дата: Среда, 22 Июня 2011, 15:55 | Сообщение # 14
частый гость
Сейчас нет на сайте
IN 25 это Detect mouse-over element соедени соедени со скимешом машины если тебе надо чтобы камера вращалась независимо от намедения мышки на машину убери в скрипте && IN_25>0 в условии

Добавлено (22.06.2011, 15:51)
---------------------------------------------
а все понял значит так у тя есть кнопка старта игры да? соединяешь спрайт кнопки со скриптом потом при нажатии на кнопку старта menu = false;
при заканчивании гонки menu = true;

Добавлено (22.06.2011, 15:55)
---------------------------------------------
если тебе непонятно обьясни как у тебя работает меню я те конкретнее обьясню


Самой кратой чубак
CaptainHuntДата: Среда, 22 Июня 2011, 20:11 | Сообщение # 15
был не раз
Сейчас нет на сайте
Quote
всеже скрипт работает не так как надо, еще хотелось бы чтобы была инерция у камеры, камера должна врощатся как в Undeground, и рывки очень раздражают.


Это уже другой вопрос. Нужно модифицировать скрипт для вращения.


WorldSim3D: сделай 3D игру на С++/FreeBasic/D для PC Windows/Linux. Программируй в удовольствие, а не "в тягость"! Make your project with pleasure, not with strain! Ознакомиться
roman453848Дата: Среда, 22 Июня 2011, 21:03 | Сообщение # 16
частый гость
Сейчас нет на сайте
сложновато просто если ненажата кнопка скрипт непашет а енерция запускается при отпускании кнопки а она работает токо когда скрипт рабоатет

Самой кратой чубак
Black_RacerДата: Пятница, 24 Июня 2011, 10:27 | Сообщение # 17
частый гость
Сейчас нет на сайте
ну вот нужно каким нибудь образом реализовать это, все встало на данном этапе. sad

Сообщение отредактировал Black_Racer - Пятница, 24 Июня 2011, 10:28
SEFA1370Дата: Пятница, 24 Июня 2011, 10:55 | Сообщение # 18
Аццкий юзер UDK
Сейчас нет на сайте
Если кто знает как, то можно просто останавливать действие скрипта не сразу после отпускания кнопки, а после 1 секунды*) Наверно...

Nasa13Дата: Пятница, 24 Июня 2011, 15:36 | Сообщение # 19
заслуженный участник
Сейчас нет на сайте
http://3drad-alec.ucoz.com/forum/5-226-1
Вот, посмотри, решил тоже сделать, там рывков мало)))может быть , скоро сделаю инерцию


все люди одинаково полезны,говорил людоед туристам.

Мешает грудь? Спячь под "СПОЙЛЕР.*)

моя мини демка ,хоррор http://3drad-alec.ucoz.com/forum/6-39-1
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг