purebasic.info

PureBasic forum
Текущее время: Ср янв 17, 2018 4:19 pm

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 5 ] 
Автор Сообщение
 Заголовок сообщения: Мышь в Screen'е
СообщениеДобавлено: Сб сен 07, 2013 3:24 pm 
Не в сети
профессор
Аватар пользователя

Зарегистрирован: Чт июн 25, 2009 1:02 pm
Сообщений: 2241
Откуда: Russia — Belarus
Благодарил (а): 0 раз.
Поблагодарили: 67 раз.
Пункты репутации: 11
Помогите. Не могу понять, как сделать, что бы мышь "грабалась" (использовалась screen'ом, когда ещё курсор скрывается) только в момент, когда зажата левая кнопка мыши.
Код:
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
EnableExplicit
 
Procedure error(error_num.i)
  Debug "error"
  Debug error_num
  End
EndProcedure
 
Enumeration
  #window
EndEnumeration
 
#window_w = 640
#window_h = 480
#window_title = "CLIPViewer"
 
Structure application_state
  mouse_grab.i
  mouse_button_left.i
  mouse_delta_x.i
  mouse_delta_y.i
EndStructure
 
Define state.application_state
 
If InitEngine3D() = 0
  error(0)
Else
  If InitSprite() = 0
    error(1)
  Else
    If InitKeyboard() = 0
      error(2)
    Else
      If InitMouse() = 0
        error(3)
      Else
        If OpenWindow(#window, #PB_Ignore, #PB_Ignore, #window_w, #window_h, #window_title, #PB_Window_SystemMenu | #PB_Window_ScreenCentered) = 0
          error(4)
        Else
          If OpenWindowedScreen(WindowID(#window), 0, 0, #window_w, #window_h, 0, 0, 0, #PB_Screen_NoSynchronization) = 0
            error(5)
          Else
            Repeat
              Select WaitWindowEvent()
                Case #PB_Event_CloseWindow
                  Break
                Default
                  ExamineKeyboard()
                  ExamineMouse()
                  RenderWorld()
                  FlipBuffers()
                  If KeyboardPushed(#PB_Key_Escape) <> 0
                    Break
                  EndIf
                 
                  state\mouse_button_left = MouseButton(#PB_MouseButton_Left)
                  If state\mouse_button_left = 1
                    ;ReleaseMouse(1)
                  Else
                    ;ReleaseMouse(0)
                  EndIf
                  Debug state\mouse_button_left
                 
;                   If IsScreenActive() = 1
;                     Debug "active"
;                     ReleaseMouse(0)
;                   Else
;                     Debug "not"
;                     ReleaseMouse(1)
;                   EndIf
;                   If MouseButton(#PB_MouseButton_Left) = 0
;                     state\mouse_grab = 0
;                   Else
;                     state\mouse_grab = 1
;                   EndIf
;                   If state\mouse_grab = 1
;                     state\mouse_delta_x = MouseDeltaX()
;                     state\mouse_delta_y = MouseDeltaY()
;                     Debug state\mouse_delta_x
;                   Else
;                     Debug "rel"
;                     ReleaseMouse(1)
;                   EndIf
              EndSelect
            ForEver
          EndIf
        EndIf
      EndIf
    EndIf
  EndIf
EndIf


_________________
EnableExplicit User


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Сб сен 07, 2013 4:13 pm 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11077
Благодарил (а): 4 раз.
Поблагодарили: 384 раз.
Код:
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
EnableExplicit 
 
 Procedure error(error_num.i)
   Debug "error"
   Debug error_num
   End
 EndProcedure
 
 Enumeration
   #window
 EndEnumeration
 
 #window_w = 640
 #window_h = 480
 #window_title = "CLIPViewer"
 
 Structure application_state
   mouse_grab.i
   mouse_button_left.i
   mouse_delta_x.i
   mouse_delta_y.i
 EndStructure
 
 Define state.application_state
 
 Define mState=0
 
 If InitEngine3D() = 0
   error(0)
 Else
   If InitSprite() = 0
     error(1)
   Else
     If InitKeyboard() = 0
       error(2)
     Else
       If InitMouse() = 0
         error(3)
       Else
         If OpenWindow(#window, #PB_Ignore, #PB_Ignore, #window_w, #window_h, #window_title, #PB_Window_SystemMenu | #PB_Window_ScreenCentered) = 0
           error(4)
         Else
           If OpenWindowedScreen(WindowID(#window), 0, 0, #window_w, #window_h, 0, 0, 0, #PB_Screen_NoSynchronization) = 0
             error(5)
           Else
             Repeat
               
               If GetAsyncKeyState_(#VK_LBUTTON)=0
                 If mState=#False
                   mState=#True
                   ReleaseMouse(1)
                   
                 EndIf
               Else
                 If mState=#True
                   mState=#False
                   MouseLocate(WindowMouseX(#window), WindowMouseY(#window))
                   ReleaseMouse(0)
                 EndIf
               EndIf
               
               Select WaitWindowEvent()
                 Case #PB_Event_CloseWindow
                   Break
                 Default
                   ExamineKeyboard()
                   ExamineMouse()
                   RenderWorld()
                   FlipBuffers()
                   If KeyboardPushed(#PB_Key_Escape) <> 0
                     Break
                   EndIf
                   
                   state\mouse_button_left = MouseButton(#PB_MouseButton_Left)
                   If state\mouse_button_left = 1
                     ;ReleaseMouse(1)
                   Else
                     ;ReleaseMouse(0)
                   EndIf
                   Debug state\mouse_button_left
                   
 ;                   If IsScreenActive() = 1
 ;                     Debug "active"
 ;                     ReleaseMouse(0)
 ;                   Else
 ;                     Debug "not"
 ;                     ReleaseMouse(1)
 ;                   EndIf
 ;                   If MouseButton(#PB_MouseButton_Left) = 0
 ;                     state\mouse_grab = 0
 ;                   Else
 ;                     state\mouse_grab = 1
 ;                   EndIf
 ;                   If state\mouse_grab = 1
 ;                     state\mouse_delta_x = MouseDeltaX()
 ;                     state\mouse_delta_y = MouseDeltaY()
 ;                     Debug state\mouse_delta_x
 ;                   Else
 ;                     Debug "rel"
 ;                     ReleaseMouse(1)
 ;                   EndIf
               EndSelect
             ForEver
           EndIf
         EndIf
       EndIf
     EndIf
   EndIf
 EndIf


_________________
Компьютер позволяет решать все те проблемы, которые до его изобретения не существовали. :) :)


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Сб сен 07, 2013 4:35 pm 
Не в сети
профессор
Аватар пользователя

Зарегистрирован: Чт июн 25, 2009 1:02 pm
Сообщений: 2241
Откуда: Russia — Belarus
Благодарил (а): 0 раз.
Поблагодарили: 67 раз.
Пункты репутации: 11
Пётр, спасибо, а кроссплатформенное решение существует?
Я сначала подумал про SetWindowCallback(), но если там вылавливать нажатие мыши, то оно будет для Windows своё?

_________________
EnableExplicit User


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Сб сен 07, 2013 4:44 pm 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11077
Благодарил (а): 4 раз.
Поблагодарили: 384 раз.
Можешь используя функции DesktopMouseX() и DesktopMouseY() определять находится ли курсор мышки в пределах окна и если вышел за пределы, то освобождай мышку.

_________________
Компьютер позволяет решать все те проблемы, которые до его изобретения не существовали. :) :)


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вс сен 08, 2013 5:55 am 
Не в сети
профессор
Аватар пользователя

Зарегистрирован: Чт июн 25, 2009 1:02 pm
Сообщений: 2241
Откуда: Russia — Belarus
Благодарил (а): 0 раз.
Поблагодарили: 67 раз.
Пункты репутации: 11
Костыли, однако, ну да ладно. 3D вопрос:
Создаю такой объект:
Код:
1
2
3
4
5
6
7
8
9
10
Define current_mesh.i = CreateMesh(#PB_Any, #PB_Mesh_TriangleFan, #PB_Mesh_Static)
MeshVertexPosition(0, 0, 0)
MeshVertexPosition(-5, 5, 0)
MeshVertexPosition(-3, 7, 0)
MeshVertexPosition(0, 10, 0)
MeshVertexPosition(3, 7, 0)
MeshVertexPosition(5, 5, 0)
FinishMesh(1)
CreateEntity(#PB_Any, MeshID(current_mesh), MaterialID(#material))
 


Выглядит так (сетка).
Хочу задать цвета вертексам, код теперь такой:
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Define current_mesh.i = CreateMesh(#PB_Any, #PB_Mesh_TriangleFan, #PB_Mesh_Static)
MeshVertexPosition(0, 0, 0)
MeshVertexColor(RGB(Random(255),Random(255),Random(255)))
MeshVertexPosition(-5, 5, 0)
MeshVertexColor(RGB(Random(255),Random(255),Random(255)))
MeshVertexPosition(-3, 7, 0)
MeshVertexColor(RGB(Random(255),Random(255),Random(255)))
MeshVertexPosition(0, 10, 0)
MeshVertexColor(RGB(Random(255),Random(255),Random(255)))
MeshVertexPosition(3, 7, 0)
MeshVertexColor(RGB(Random(255),Random(255),Random(255)))
MeshVertexPosition(5, 5, 0)
MeshVertexColor(RGB(Random(255),Random(255),Random(255)))
FinishMesh(1)
CreateEntity(#PB_Any, MeshID(current_mesh), MaterialID(#material))
 


Но ничего не меняется. Надо что-то сделать еще?

Полный код, готовый к компиляции здесь (надо пролететь чуть вперед и развернуться, WASD).

_________________
EnableExplicit User


Вернуться наверх
 Профиль  
 
Показать сообщения за:  Сортировать по:  
Начать новую тему Ответить на тему  [ Сообщений: 5 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group (блог о phpBB)
Сборка создана CMSart Studio
Русская поддержка phpBB