würfel mit buttion bewegen, wie geht das hier

Fragen zu Grafik- & Soundproblemen und zur Spieleprogrammierung haben hier ihren Platz.
super_castle
Beiträge: 557
Registriert: 29.11.2005 15:05

würfel mit buttion bewegen, wie geht das hier

Beitrag von super_castle »

hallo, ich habe eine würfeldemo im fenster.
habe dieses fenster kleiner gemacht:
"OpenWindowedScreen(WindowID(0), 0, 0, 300, 300, 0, 0, 0)"
und möchte auf den rest des "openwindow" 2 druckbutton setzen und damit den würfel steuern.
wie bekomme ich die button jetzt in das fenster.

mfg castle

Code: Alles auswählen

InitKeyboard()
InitEngine3D()
InitSprite()
InitMouse()

OpenWindow(0, 50, 50, 640, 480, #PB_Window_SystemMenu, "3D - Würfel")
OpenWindowedScreen(WindowID(0), 0, 0, 640, 480, 0, 0, 0)

Procedure RCol()
 ProcedureReturn RGB(Random(240)+15, Random(235)+20, Random(235)+20)
EndProcedure

Procedure NewMaterial(N)
 
 CreateTexture(N, 256, 256)
 StartDrawing(TextureOutput(N))
  Box(  0,   0, 128, 128, RCol())
  Box(  0, 128, 128, 128, RCol())
  Box(128,   0, 128, 128, RCol())
  Box(128, 128, 128, 128, RCol())
 StopDrawing()

 CreateMaterial    (0, TextureID(N))
   
 ProcedureReturn MaterialID(0)
EndProcedure
 
 ;- Kamera einstellen
 
 CreateCamera(0,  0,  5, 100, 90)
 CameraLocate(0, 33, 56, -66)
 CameraLookAt(0, 10, 10, 15)
 
 DataSection
  V_01:
   Data.f 00,00,00 ;Point 0
   Data.f 32,00,00 ;Point 1
   Data.f 00,00,32 ;Point 2
   Data.f 32,00,32 ;Point 3
   Data.f 00,32,00 ;Point 4
   Data.f 32,32,00 ;Point 5                 P2                    P3
   Data.f 00,32,32 ;Point 6                   *------------------*
   Data.f 32,32,32 ;Point 7                 /  \ _________ D0  / |
  T_01:               ;                 P0 /   D1          \  / D5|
   Data.w 0, 1, 2 ;Dreieck 0  (oben)     *------------------*\   |
   Data.w 2, 1, 3 ;Dreieck 1             |\               P1| |  |
   Data.w 6, 5, 4 ;Dreieck 2  (unten)    |  \     D8        | |  |
   Data.w 7, 5, 6 ;Dreieck 3             |    \             | |  |
   Data.w 7, 1, 5 ;Dreieck 4  (rechts)   |      \           | \  |
   Data.w 3, 1, 7 ;Dreieck 5             |        \         |  | |
   Data.w 0, 6, 4 ;Dreieck 6  (links)    |          \       |  | |
   Data.w 2, 6, 0 ;Dreieck 7             |   D9       \     |   \|
   Data.w 5, 1, 0 ;Dreieck 8  (vorne)    |              \   | D4 * P7
   Data.w 0, 4, 5 ;Dreieck 9             |                \ |  /
   Data.w 2, 3, 7 ;Dreieck 10 (hinten)   *------------------*/
   Data.w 7, 6, 2 ;Dreieck 11            P4                 P5
  U_01:
   Data.f 0.0, 0.0 ; Vertex 0
   Data.f 0.0, 1.0 ; Vertex 1
   Data.f 1.0, 0.0 ; Vertex 2
   Data.f 1.0, 1.0 ; Vertex 3
   
   Data.f 0.0, 0.0 ; Vertex 4
   Data.f 0.0, 1.0 ; Vertex 5
   Data.f 1.0, 0.0 ; Vertex 6
   Data.f 1.0, 1.0 ; Vertex 7
   
  EndDataSection
 
 CreateMesh(0)
  SetMeshData(0, #PB_Mesh_Vertices,      ?V_01,   08)
  SetMeshData(0, #PB_Mesh_Triangles,     ?T_01,   12)
  SetMeshData(0, #PB_Mesh_UVCoordinates, ?U_01,   08)
 
 CreateEntity(0, MeshID(0), NewMaterial(0))
 EntityLocate(0, 5, 0, 5)
 
 ;- Hauptschleife
 Repeat
 
  RenderWorld()
 
  StartDrawing(ScreenOutput())
   Locate(4, 3)
   FrontColor(255,255,255) : BackColor(0,0,0)
   DrawText("Position = " +Str(CameraX(0))+ " ; " +Str(CameraY(0))+ " ; " + Str(CameraZ(0)) + Space(10))
   Locate(4, 460) : DrawText("Auf = Num8  |  Ab = Num2  |  Textur ändern = Eingabe | Drehen = Strg rechts")
  StopDrawing()
 
  FlipBuffers()
 
  ExamineKeyboard()
  If KeyboardPushed(#PB_Key_All)
   Zm = 0 : Xm = 0 : Ym = 0
   If KeyboardPushed(#PB_Key_Up)       : Zm = -2.1 : EndIf
   If KeyboardPushed(#PB_Key_Down)     : Zm =  2.1 : EndIf
   If KeyboardPushed(#PB_Key_Right)    : Xm =  2.1 : EndIf
   If KeyboardPushed(#PB_Key_Left)     : Xm = -2.1 : EndIf
   If KeyboardPushed(#PB_Key_Pad8)     : Ym =  2.1 : EndIf
   If KeyboardPushed(#PB_Key_Pad2)     : Ym = -2.1 : EndIf
   If KeyboardPushed(#PB_Key_Return)   : N*-1+1 : EntityMaterial(0, NewMaterial(N)) : EndIf
   MoveCamera(0, Xm, Ym, Zm)
   If KeyboardPushed(#PB_Key_RightControl)
     ReleaseMouse(0)
     ExamineMouse()
     RotateCamera(0, -MouseDeltaX(), -MouseDeltaY(), 0)
     MouseLocate(320, 240)
   EndIf
  EndIf
  If KeyboardReleased(#PB_Key_RightControl) : ReleaseMouse(1) : EndIf
   
  RotateEntity(0, 0.1, 0.05, 0.1)
   
Until KeyboardPushed(#PB_Key_Escape) Or WindowEvent() = #PB_Event_CloseWindow

CloseScreen()

End
; IDE Options = PureBasic v3.94 (Windows - x86)
; CursorPosition = 84
; FirstLine = 43
; Folding = -

Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag von AND51 »

Ist zwar nicht direkt hilfreich, aber bei mir kommt immer ein fehler, wenn ich Eingabe drücke:
"Invalid memory access." (Beim wechseln der Textur in Zeile 15)

beantwortet nicht deine Frage, aber ich dachte, es offenbart ein anderes Problem, damit du in Zukunft nicht mehr danach suchen musst....
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
super_castle
Beiträge: 557
Registriert: 29.11.2005 15:05

Beitrag von super_castle »

das ist eine texture, die hiermit nichts zu tun hat.
ich möchte 2 button dort unterbringen.
kannst die zeile deaktivieren, dann läuft das programm, sind doch nur abfragen von tasten nichts weiter.

mfd castle
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag von AND51 »

wollt eh nur bescheid sagen, wusste nicht ob das von interesse ist, hätt ja sein können...
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Benutzeravatar
AndyX
Beiträge: 1272
Registriert: 17.12.2004 20:10
Wohnort: Niederösterreich
Kontaktdaten:

Beitrag von AndyX »

Einfach den WindowedScreen mit RightOffset und BottomOffset maken und dann Gadgets dazu plazen.
Benutzeravatar
Kiffi
Beiträge: 10715
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag von Kiffi »

> maken und dann [...] plazen.

:shock:
Benutzeravatar
AndyX
Beiträge: 1272
Registriert: 17.12.2004 20:10
Wohnort: Niederösterreich
Kontaktdaten:

Beitrag von AndyX »

Huch! Kiffi ist bei dem Anblick meiner Rechtschreibung ohnmächtig geworden :mrgreen:
super_castle
Beiträge: 557
Registriert: 29.11.2005 15:05

Beitrag von super_castle »

hallo, jetzt bekomme ich im window(grau) den 3dscreen mit dem würfel.
wenn ich mehrmals starte, kommt auch manchmal nur wieder ein komplettes schwarzes window. woran liegt das?
muss beim schliessen wieder speicher freigegeben werden,und wie?
im 3d-fenster (zur zeit noch schwarz) ist ein oberer rand von ca 20 pixel breite, sieht man, wenn man den würfel nach oben verschiebt, wie bekommt man den weg?
wie kann man dem 3d-fenster einen farbigen hintergrund geben?
danke für die hilfe.

neuer nachtrag: wenn das window schwarz ist und ich schiebe ein anderes window darüber, dann werden die berührten flächen grau vomwindow. obwohl ich diese beiden befehle :
FlipBuffers()
RenderWorld()
schon drin habe.????

mfg castle

Code: Alles auswählen

InitKeyboard()
InitEngine3D()
InitSprite()
InitMouse()

OpenWindow(0, 0, 0, 800, 700, #PB_Window_SystemMenu , "3D - Würfel")
OpenWindowedScreen(WindowID(0), 130, 5, 400, 400, 0, 0, 0)

Procedure RCol()
 ProcedureReturn RGB(Random(240)+15, Random(235)+20, Random(235)+20)
EndProcedure

Procedure NewMaterial(N)
 
 CreateTexture(N, 256, 256)
 StartDrawing(TextureOutput(N))
  Box(  0,   0, 128, 128, RCol())
  Box(  0, 128, 128, 128, RCol())
  Box(128,   0, 128, 128, RCol())
  Box(128, 128, 128, 128, RCol())
 StopDrawing()

 CreateMaterial    (0, TextureID(N))
   
 ProcedureReturn MaterialID(0)
EndProcedure
 
 ;- Kamera einstellen
 
 CreateCamera(0,  0,  5, 100, 90)
 CameraLocate(0, 33, 56, -66)
 CameraLookAt(0, 10, 10, 15)
 CreateLight(0, RGB(0,0,255), 100.0, 0, 0)   ; Blue light
 
 DataSection
  V_01:
   Data.f 00,00,00 ;Point 0
   Data.f 32,00,00 ;Point 1
   Data.f 00,00,32 ;Point 2
   Data.f 32,00,32 ;Point 3
   Data.f 00,32,00 ;Point 4
   Data.f 32,32,00 ;Point 5                 P2                    P3
   Data.f 00,32,32 ;Point 6                   *------------------*
   Data.f 32,32,32 ;Point 7                 /  \ _________ D0  / |
  T_01:               ;                 P0 /   D1          \  / D5|
   Data.w 0, 1, 2 ;Dreieck 0  (oben)     *------------------*\   |
   Data.w 2, 1, 3 ;Dreieck 1             |\               P1| |  |
   Data.w 6, 5, 4 ;Dreieck 2  (unten)    |  \     D8        | |  |
   Data.w 7, 5, 6 ;Dreieck 3             |    \             | |  |
   Data.w 7, 1, 5 ;Dreieck 4  (rechts)   |      \           | \  |
   Data.w 3, 1, 7 ;Dreieck 5             |        \         |  | |
   Data.w 0, 6, 4 ;Dreieck 6  (links)    |          \       |  | |
   Data.w 2, 6, 0 ;Dreieck 7             |   D9       \     |   \|
   Data.w 5, 1, 0 ;Dreieck 8  (vorne)    |              \   | D4 * P7
   Data.w 0, 4, 5 ;Dreieck 9             |                \ |  /
   Data.w 2, 3, 7 ;Dreieck 10 (hinten)   *------------------*/
   Data.w 7, 6, 2 ;Dreieck 11            P4                 P5
  U_01:
   Data.f 0.0, 0.0 ; Vertex 0
   Data.f 0.0, 1.0 ; Vertex 1
   Data.f 1.0, 0.0 ; Vertex 2
   Data.f 1.0, 1.0 ; Vertex 3
   
   Data.f 0.0, 0.0 ; Vertex 4
   Data.f 0.0, 1.0 ; Vertex 5
   Data.f 1.0, 0.0 ; Vertex 6
   Data.f 1.0, 1.0 ; Vertex 7
   
  EndDataSection
 
 CreateMesh(0)
  SetMeshData(0, #PB_Mesh_Vertices,      ?V_01,   08)
  SetMeshData(0, #PB_Mesh_Triangles,     ?T_01,   12)
  SetMeshData(0, #PB_Mesh_UVCoordinates, ?U_01,   08)
 
 CreateEntity(0, MeshID(0), NewMaterial(0))
 EntityLocate(0, 5, 0, 5)
  
 ;- Hauptschleife
 Repeat
 
  WinEvent = WindowEvent()
 
  ExamineKeyboard()
  If KeyboardPushed(#PB_Key_All)
   Zm = 0 : Xm = 0 : Ym = 0
   If KeyboardPushed(#PB_Key_Up)       : Zm = -2.1 : EndIf
   If KeyboardPushed(#PB_Key_Down)     : Zm =  2.1 : EndIf
   If KeyboardPushed(#PB_Key_Right)    : Xm =  2.1 : EndIf
   If KeyboardPushed(#PB_Key_Left)     : Xm = -2.1 : EndIf
   If KeyboardPushed(#PB_Key_Pad8)     : Ym =  2.1 : EndIf
   If KeyboardPushed(#PB_Key_Pad2)     : Ym = -2.1 : EndIf
   MoveCamera(0, Xm, Ym, Zm)   
  EndIf
 
  RotateEntity(0, 0.1, 0.05, 0.1)
  
  FlipBuffers()
  RenderWorld()
  
  
Until WinEvent = #PB_Event_CloseWindow
CloseWindow(0)

Zuletzt geändert von super_castle am 11.12.2005 16:29, insgesamt 1-mal geändert.
Benutzeravatar
SoS
Beiträge: 340
Registriert: 29.08.2004 09:31
Kontaktdaten:

Beitrag von SoS »

Du must glaube ich erst mal ein Gadget im fenster darstellen damit es nicht mehr schwarz wird.
Teste mal mit folgendem Code.

Code: Alles auswählen

OpenWindow(0, 0, 0, 800, 700, #PB_Window_SystemMenu , "3D - Würfel") 
CreateGadgetList(WindowID(0))
OpenWindowedScreen(WindowID(0), 130, 15, 400, 400, 1, 270,290) 
Frame3DGadget(0, 120, 5, 420, 420, "")
Must nur noch an die von Dir gewünschte Grösse anpassen ;)
Benutzeravatar
Batze
Beiträge: 1492
Registriert: 03.06.2005 21:58
Wohnort: Berlin
Kontaktdaten:

Beitrag von Batze »

super_castle hat geschrieben: im 3d-fenster (zur zeit noch schwarz) ist ein oberer rand von ca 20 pixel breite, sieht man, wenn man den würfel nach oben verschiebt, wie bekommt man den weg?
Na indem man die Höhe der Camera auf 100% stellt.

PS: Schön das dir mein Beispiel hilft. <)
Hier sind meine Codes (aber die Seite geht gerade nicht):
http://www.basicpure.de.vu
Antworten