Форум программистов, компьютерный форум, киберфорум
Pure Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/9: Рейтинг темы: голосов - 9, средняя оценка - 4.67
1 / 1 / 1
Регистрация: 21.01.2012
Сообщений: 13

Как сделать чтобы Entity всегда двигался ко второму Entity

21.01.2012, 16:44. Показов 1980. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
здравствуйте!!! Скажите пожалуйста, знающие люди, как сделать чтобы Entity всегда двигался ко второму Entity.
у меня есть плоскость, на ней расположен куб, при клику мышкой у меня создается сфера, в том месте где я кликнул... Мне нужно чтобы куб всегда двигался к этой сфере по оси X и Z.
Purebasic 4.60
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
21.01.2012, 16:44
Ответы с готовыми решениями:

Как сделать, чтобы при точном совпадении всех атрибутов entity в таблицу печаталась одна строка с количеством этих entity ?
В программировании я всего месяц – потребовалось написать плагин на RUBY. Написал , все работает. Но хочется «красоты». Помогите дописать… ...

@OneToOne or @ManyToOne on `my entity#1` references an unknown entity `my entity#2`
Привет всем! У меня появилась такая ошибка когда я работаю с двумя базами, именно когда делаю save в другую базу сущность первой, ...

Как сделать чтобы корабль двигался по колу, и двигался в другую сторону нажатием стрелки
Как сделать чтобы корабль двигался по колу, и двигался в другую сторону нажатием стрелки.

7
 Аватар для Pro_grammer
6807 / 2839 / 527
Регистрация: 24.04.2011
Сообщений: 5,308
Записей в блоге: 10
21.01.2012, 17:14
Цитата Сообщение от an88 Посмотреть сообщение
Мне нужно чтобы куб всегда двигался к этой сфере по оси X и Z.
Наверно надо в цикле к координатам куба прибавлять какое то приращение, пропорциональное скорости движения куба, пока координаты куба и сферы не сравняются.
Ну а вообще, без исходного кода как можно дать дельный совет? Выкладывайте, что у вас есть.
1
1 / 1 / 1
Регистрация: 21.01.2012
Сообщений: 13
21.01.2012, 17:39  [ТС]
PureBasic
1
2
3
4
5
6
7
8
9
10
If MouseButton(#PB_MouseButton_Left)
 
          sphera=CreateEntity(#pb_any,CreateSphere(5,1),MaterialID(ninjaM))
          sphe=1
          
          Entity = MousePick(cam, MouseX(), MouseY())
          EntityLocate(sphera, PickX(), PickY(), PickZ())
 
          MoveEntity(cube,EntityX(sphera),0,EntityZ(sphera)) ;
   EndIf
вот здесь у меня не получается, когда нажимаю кнопку мыши сфера создается где надо , но куб с бешеной скоростью улетает в другие стороны

Добавлено через 16 минут
если надо, вот полный код:


PureBasic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
#PlayerSpeed=6 ;скорость движения для камеры
 
IncludeFile "Screen3DRequester.pb";чтобы менять разрешение экрана
 
Define.f KeyX, KeyY, MouseX, MouseY; для управления с клавиатуры
 
InitEngine3D(); подключаем 3D библиотеку
InitSprite()  ; библиотека для работы мсо спрайтами
 
 
InitKeyboard() ; инициализируем клаву
InitMouse() ; и мышку
 
If Screen3DRequester() ; открываем окно
  EnableWorldPhysics(1)
  ExamineWorldCollisions()
  ;*****************указываем все необходимые нам папки*********************
  Add3DArchive("Data/", #PB_3DArchive_FileSystem) 
  Add3DArchive("MyData/", #PB_3DArchive_FileSystem)
  Add3DArchive("GUI/", #PB_3DArchive_FileSystem)
  Add3DArchive("Jaiqua/", #PB_3DArchive_FileSystem)
  ;*************************да будет СВЕТ!**********************************
  ;lig=CreateLight(#PB_Any,RGB(255,0,0),150,100,0)
  
  ;************************КАМЕРА*******************************************
  cam=CreateCamera(#PB_Any, 0, 0, 100, 100)
  CameraLocate(cam,0,0,250) ; позиция камеры
  
  ;*************************создадим плоскость из куба**********************
  cubMesh=CreateCube(#PB_Any,10);создаем сетку куба
  cubTex=LoadTexture(#PB_Any,"cub.jpg");загружаем текстуру из папки
  cubMat=CreateMaterial(#PB_Any,TextureID(cubTex));из текстуры создаем материал
  plane=CreateEntity(#PB_Any, MeshID(cubMesh), MaterialID(cubMat), 0,0, 0);создаем куб из сетки и применяем к нему материал
  ScaleEntity(plane, 100, 0.5, 100); растягиваем куб
  EntityPhysicBody(plane, #PB_Entity_BoxBody,0);добавляем к нему физические свойства куба
  SetEntityAttribute(plane, 0.1, #PB_Entity_Friction)
  
  ;************************************CURSOR********************************
  sphereMesh=CreateSphere(#PB_Any, 1)
  sphere=CreateEntity(#PB_Any, MeshID(sphereMesh), MaterialID(cubmat))  
  ScaleEntity(sphere, 0.1, 0.1, 0.1)
  
  ;***********************************CUBE***********************************
  cubeMesh=CreateCube(#PB_Any,10);создаем сетку куба
  cubeTex=LoadTexture(#PB_Any,"cub.jpg");загружаем текстуру из папки
  cubeMat=CreateMaterial(#PB_Any,TextureID(cubeTex));из текстуры создаем материал
  cube=CreateEntity(#PB_Any, MeshID(cubeMesh), MaterialID(cubeMat), 0,10, 0);создаем куб из сетки и применяем к нему материал
  ScaleEntity(cube, 2, 0.5, 1); растягиваем куб
  EntityLocate(cube,20,10,20)
  ;EntityPhysicBody(cube, #PB_Entity_BoxBody,1);добавляем к нему физические свойства куба
  SetEntityAttribute(cube, 0.1, #PB_Entity_Restitution)
  
  ;__________________________________________________________________________________________
  ;*****************************************************************************************|
  Repeat ;***** НАЧАЛО ГЛАВНОГО ЦИКЛА ******************************************************
    ;_________________________________________________________________________________________|
    ;******************************************************************************************
    Screen3dEvents()
    
    ;********************** GUI ************************************************** 
    If KeyboardReleased(#PB_Key_T) And  gadg=0
      menu=OpenWindow3D(#PB_Any, 0, 0, 340, 300, "KILLER EVE ONLINE")
      stroka=StringGadget3D(#PB_Any, 20, 40, 300, 50, "RUMEDIA.ORG", #PB_String3D_ReadOnly)
      buton1=ButtonGadget3D(#PB_Any,20,100,40,20,"stop")
      buton2=ButtonGadget3D(#PB_Any,60,100,40,20,"play")
      buton3=ButtonGadget3D(#PB_Any,20,130,40,20,"close")
      ShowGUI(128, 1)
      gadg=1
    EndIf
    Repeat
      Event3d = WindowEvent3D()
      
      Select Event3d
        Case #PB_Event3D_Gadget
          If EventGadget3D() = buton1
            y=0
          EndIf
          If EventGadget3D() = buton2
            y=0.5
          EndIf
          If EventGadget3D() = buton3 
            CloseWindow3D(menu) 
            gadg=0
          EndIf
      EndSelect
    Until Event3d = 0
    ;**************************************************************************** 
    ;*****************УПРАВЛЕНИЕ**************************************     
    If ExamineKeyboard() ;обновляем клавиатуру
      If KeyboardPushed(#PB_Key_Left) ; здесь думаю все понятно
        KeyX = -#PlayerSpeed ; скорость передвижения
      ElseIf KeyboardPushed(#PB_Key_Right)
        KeyX = #PlayerSpeed
      Else
        KeyX = 0
      EndIf 
      If KeyboardPushed(#PB_Key_Up)
        KeyY = -#PlayerSpeed
      ElseIf KeyboardPushed(#PB_Key_Down)
        KeyY = #PlayerSpeed
      Else
        KeyY = 0
      EndIf 
    EndIf 
    If ExamineMouse() ; обновляем мышь
      MouseX = -(MouseDeltaX()/10)*| class="re2">#PlayerSpeed/2       ;-|
      MouseY = -(MouseDeltaY()/10)*| class="re2">#PlayerSpeed/2       ; | обзор мышкой
      RotateCamera(cam, MouseY, MouseX, 0, #PB_Relative);_|
      MoveCamera(cam, KeyX, 0, KeyY); движение ВПЕРЕД - НАЗАД, ВЛЕВО-ВПРАВО
      
      InputEvent3D(MouseX(), MouseY(), MouseButton(#PB_MouseButton_Left), Input$)
      
      ;*********************************************************************************
      ;*********************************************************************************
      
      If MouseButton(#PB_MouseButton_Left)
        CreateEntity(4,CreateSphere(5,1),MaterialID(cubmat))
        sphe=1
        
        Entity = MousePick(cam, MouseX(), MouseY())
        EntityLocate(4, PickX(), PickY(), PickZ())
        
        MoveEntity(cube,EntityX(4),0,EntityZ(4))
      EndIf
      ;sphe=0
    EndIf
    
    
    RenderWorld() ;рисуем мир
    Screen3DStats()
    FlipBuffers() ; меняем местами передний и задний буфер
  Until KeyboardPushed(#PB_Key_Escape) ; прерывание цикла при нажатии на ECS
  
EndIf
0
 Аватар для Pro_grammer
6807 / 2839 / 527
Регистрация: 24.04.2011
Сообщений: 5,308
Записей в блоге: 10
21.01.2012, 20:59
Не стал разбирать пример, тем более, что нет у меня текстур этих.
Вот код из примеров, дополненный движением:
PureBasic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
#CameraSpeed = 0.4
 
Enumeration
  #MainWindow 
  #Editor
EndEnumeration
 
IncludeFile "Screen3DRequester.pb"
 
Define.f KeyX, KeyY, MouseX, MouseY
 
If InitEngine3D()
  
  Add3DArchive("Data/Textures", #PB_3DArchive_FileSystem)
  Add3DArchive("Data/Models", #PB_3DArchive_FileSystem)
  Add3DArchive("Data/Scripts", #PB_3DArchive_FileSystem)
  Add3DArchive("Data/GUI", #PB_3DArchive_FileSystem)
  Parse3DScripts()
  
  InitSprite()
  InitKeyboard()
  InitMouse()
  
  If Screen3DRequester()
    
    ; First create materials
    ;
    GetScriptMaterial(0, "Color/Blue")
    GetScriptMaterial(1, "Color/Green")
    GetScriptMaterial(2, "Color/Red")
    GetScriptMaterial(3, "Color/Yellow")
    CreateMaterial(4, LoadTexture(0, "Dirt.jpg"))
    
    ; Meshes
    ;
    CreateCube(0, 2)
    CreateSphere(1, 1)
    CreateCylinder(2, 1, 4)
    CreatePlane(3, 20, 20, 1, 1, 1, 1)
 
    ; Entities
    ;
    CreateEntity(0, MeshID(0), MaterialID(0),  4, 1, 0)
    CreateEntity(1, MeshID(1), MaterialID(1), -4, 1, 0)
    CreateEntity(2, MeshID(2), MaterialID(2),  0, 2, 0)
    CreateEntity(4, MeshID(3), MaterialID(4))
    
    CreateEntity(3, MeshID(1), MaterialID(3))  
    ScaleEntity(3, 0.1, 0.1, 0.1)
    
    ; Camera
    ;
    CreateCamera(0, 0, 0, 100, 100)
    CameraLocate(0, -1, 8, 15)
    CameraLookAt(0, -1, 0, 0)
    
    ; Light
    ;
    CreateLight(0, $FFFFFF, 1560, 900, 500)
    AmbientColor($330000)
    
    ;GUI
    ;
    OpenWindow3D(#MainWindow, 0, 0, 340, 100, "MousePick")
    StringGadget3D(#Editor, 20, 40, 300, 50, "Clic somewhere", #PB_String3D_ReadOnly)
    
    
    ShowGUI(128, 1) ; Display the GUI, semi-transparent and display the mouse cursor
 
    Repeat
      Screen3DEvents()
      
      Repeat
        Event3D = WindowEvent3D()
      Until Event3D = 0
      
      If ExamineKeyboard()
        
        If KeyboardPushed(#PB_Key_Left)
          KeyX = -#CameraSpeed 
        ElseIf KeyboardPushed(#PB_Key_Right)
          KeyX = #CameraSpeed 
        Else
          KeyX = 0
        EndIf
        
        If KeyboardPushed(#PB_Key_Up)
          KeyY = -#CameraSpeed 
        ElseIf KeyboardPushed(#PB_Key_Down)
          KeyY = #CameraSpeed 
        Else
          KeyY = 0
        EndIf
        
      EndIf
            
      If ExamineMouse()
        MouseX = -(MouseDeltaX()/10)*| class="re2">#CameraSpeed/2
        MouseY = -(MouseDeltaY()/10)*| class="re2">#CameraSpeed/2
        
        InputEvent3D(MouseX(), MouseY(), MouseButton(#PB_MouseButton_Left), Input$)
   
        If MouseButton(#PB_MouseButton_Left) 
          Entity = MousePick(0, MouseX(), MouseY())
          If Entity>=0 And Entity<>3
            EntityLocate(3, PickX(), PickY(), PickZ())
                       
            SetGadgetText3D(#Editor, "Entity = " + Str(Entity))
          EndIf
        EndIf
        
      EndIf
      
      ;Движение к кубу
      If EntityX(3)<EntityX(0)
        EntityLocate(3, EntityX(3)+0.1,EntityY(3),EntityZ(3))
      EndIf
 
      If EntityZ(3)>EntityZ(0)
        EntityLocate(3, EntityX(3),EntityY(3),EntityZ(3)-0.1)
      EndIf
 
      
      CameraLookAt(0, 0, 0, 0)
      MoveCamera  (0, KeyX, 0, KeyY)
      
      RenderWorld()
      Screen3DStats()
      FlipBuffers()
    Until KeyboardPushed(#PB_Key_Escape) Or Quit = 1
  EndIf
  
Else
  MessageRequester("Error", "The 3D Engine can't be initialized",0)
EndIf
 
End
Кликать мышкой надо в ближней части сцены( положительной). Для отрицательной не сделано, но можно сделать по образу и подобию.
Возможно через MoveEntity как то правильней, но мне почему то так понятнее и проще.
1
1 / 1 / 1
Регистрация: 21.01.2012
Сообщений: 13
22.01.2012, 19:25  [ТС]
Pro_grammer, Спасибо огромное!!!! это именно то, что нужно!!!!

Добавлено через 2 часа 14 минут
вроде все понял как работает, но не могу сделать для движения по отрицательным осям...
помогии

Добавлено через 11 минут
все, дошло!!
PureBasic
1
2
3
4
5
6
7
8
9
10
11
12
13
   If EntityX(0)<EntityX(3)
        EntityLocate(0, EntityX(0)+0.1,EntityY(0),EntityZ(0))
      EndIf
      If EntityX(0)>EntityX(3)
        EntityLocate(0, EntityX(0)-0.1,EntityY(0),EntityZ(0))
      EndIf
 
      If EntityZ(0)>EntityZ(3)
        EntityLocate(0, EntityX(0),EntityY(0),EntityZ(0)-0.1)
      EndIf
      If EntityZ(0)<EntityZ(3)
        EntityLocate(0, EntityX(0),EntityY(0),EntityZ(0)+0.1)
      EndIf
Добавлено через 7 часов 34 минуты
еще один вопрос, как сделать чтобы гаджет был всегда снизу экрана при любых изменениях разрешения экрана
0
Эксперт по электронике
6802 / 3229 / 335
Регистрация: 28.10.2011
Сообщений: 12,609
Записей в блоге: 7
22.01.2012, 20:45
Цитата Сообщение от an88 Посмотреть сообщение
как сделать чтобы гаджет был всегда снизу экрана
Определить разрешение экрана и поместить гаджет в требуемую позицию.
0
1 / 1 / 1
Регистрация: 21.01.2012
Сообщений: 13
23.01.2012, 06:20  [ТС]
Цитата Сообщение от locm Посмотреть сообщение
Определить разрешение экрана и поместить гаджет в требуемую позицию.
это понятно, но при выборе другого разрешения экрана гаджет окажется в другом месте
0
Кормпилятор
 Аватар для Quiet Snow
5044 / 1718 / 409
Регистрация: 25.04.2010
Сообщений: 4,827
Записей в блоге: 2
23.01.2012, 18:39
но при выборе другого разрешения экрана гаджет окажется в другом месте
Так при установке экрана вы посылаете в функцию разрешение, используйте эти значения.
Считайте относительные координаты.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
23.01.2012, 18:39
Помогаю со студенческими работами здесь

Как сделать чтобы корабль двигался по колу, и двигался в другую сторону нажатием стрелки
Как сделать чтобы корабль двигался по колу, и двигался в другую сторону нажатием стрелки.

Entity Framework. Удаление entity без удаления связей
Вечер добрый. Есть модель Coder First. Каскадное удаление запрещено. Удаление произвожу так: try { ...

Entity Component System, можно ли доработать класс Entity
Здравствуйте, сделал свою реализацию Entity Component System, но хотелось бы узнать ваше мнение по поводу класса Entity. Можно ли ускорить...

Блок библиотеки моделирования процессов Enter. Функция take(entity) требует параметр "entity". Что передать в функцию?
В виде параметра функции take вношу: имяСвоегоАгента или Agent или entity. Консоль на любой из вариантов пишет &quot;... cannot be...

Entity Framework: Изменилась база данных, что и как поменять в приложении, чтобы оно работало?
Привет! Есть приложение ASP.NET MVC, в котором использую EntityFramework. Точно не помню как создавал приложение изначально (Code...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка SDL3 из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru