| 
	
		
		
			| Требуется помощь со скриптом. |  |  |  | 
| 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. Попробуй перед строкой  поставить:
 
 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 Спасибо большое
   Помогло!
 Теперь осталось решить вопрос с захватом вращаемого объекта.
 |  |  |  |  |  | 
| 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 
 Я все еще не решил эту проблему
   |  |  |  |  |  | 
| 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 не подойдёт (я его не проверял на работоспособность), то позже напишу. Извиняюсь, что пообещал, но медлю.   
 Итак, давай уточним:
 
 У тебя есть скрипт, который должен активироваться, когда мышь наводишь (и зажимаешь кнопкой) на машину. Правильно я понял ?
 
 Добавлено (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 |  |   частый гость Сейчас нет на сайте | ну вот нужно каким нибудь образом реализовать это, все встало на данном этапе.   
 
 Сообщение отредактировал 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
 |  |  |  |  |  
 |