I'm trying to get wxMax and the Blitz3D SDK to work together. It's all working pretty well, but I'm having trouble getting keyboard input from B3D.
This is my code:
Sorry if it's messy. I just threw it together for this post.
The mouse input works fine, and I can get the mouse coordinates, but I can't get any keyboard input, and MouseXSpeed(), and MouseYSpeed() don't seem to work.
I was told that changing the event handler to the following works in C++, and allows you to get keyboard input.
I can't seem to work out how to get this working in BlitzMax. Does anyone have any ideas, or know of another way to get this all working?
Thanks!
Robbie.
This is my code:
Strict Import wx.wxApp Import wx.wxFrame Import wx.wxPanel Import wx.wxSystemSettings Import wx.wxTimer Import Blitz3D.Blitz3DSDK Type MyApp Extends wxApp Field frame:MyFrame Method OnInit:Int() frame = MyFrame(New MyFrame.Create(,,"wxMax + Blitz3D", 100, 100, 640, 480, wxDEFAULT_FRAME_STYLE)) SetTopWindow(frame) frame.CenterOnScreen() frame.show() Return True EndMethod EndType Type MyFrame Extends wxFrame Field panel:wxPanel Field light:Int, camera:Int, cube:Int Field Timer:wxTimer Field sys:wxSystemSettings = New wxSystemSettings Field rendertime:Int = MilliSecs() Method OnInit() Timer = New wxTimer.Create(Self) Local w:Int, h:Int GetClientSize(w, h) panel = New wxPanel.Create(Self, wxID_ANY, 0, 0, w, h) Local hWnd:Int = Int(panel.GetHandle()) bbSetBlitz3DHWND(hWnd) bbSetBlitz3DEventCallback(Int Byte Ptr BBEventHandler) bbBeginBlitz3D bbGraphics3D Sys.GetMetric(wxSYS_SCREEN_X), Sys.GetMetric(wxSYS_SCREEN_Y), 0, 2 bbViewport 0, 0, w, h light = bbCreateLight() camera = bbCreateCamera() cube=bbCreateCube() bbPositionEntity(camera,0,0,-4) ConnectAny(wxEVT_TIMER, OnTick) Timer.Start(30) EnablePolledInput() EndMethod Function OnQuit(event:wxEvent) wxWindow(event.parent).Close(True) EndFunction Function BBEventHandler(hwnd,msg,wp,lp) "win32" bbSystemEmitOSEvent hwnd,msg,wp,lp,Null Return -1 EndFunction Function OnTick(event:wxEvent) If (MilliSecs()-(MyFrame(event.parent).rendertime)<10) Return Local w:Int, h:Int MyFrame(event.parent).panel.GetSize(w, h) MyFrame(event.parent).DrawWorld(w, h) MyFrame(event.parent).rendertime=MilliSecs() EndFunction Method DrawWorld(w, h) bbViewport 0, 0, w, h bbCameraViewport camera, 0, 0, w, h bbTurnEntity(cube,1,2,3) bbRenderWorld bbText(10, 10, MouseX() + ", " + MouseY()) bbFlip EndMethod EndType New MyApp.run()
Sorry if it's messy. I just threw it together for this post.
The mouse input works fine, and I can get the mouse coordinates, but I can't get any keyboard input, and MouseXSpeed(), and MouseYSpeed() don't seem to work.
I was told that changing the event handler to the following works in C++, and allows you to get keyboard input.
Function BBEventHandler(hwnd,msg,wp,lp) "win32" MSWWindowProc((WXUINT)msg, (WXWPARAM)wp, (WXLPARAM)lp); Return -1 End Function
I can't seem to work out how to get this working in BlitzMax. Does anyone have any ideas, or know of another way to get this all working?
Thanks!
Robbie.