Problem bei Tastaturabfrage im 3D-modus

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
Marvin133
Beiträge: 80
Registriert: 25.01.2010 15:51
Computerausstattung: Win 7 Home Premium 64 Bit \ PB 4.41 Demo\2.8Ghz QuadCore \4GB RAM\ nVidia GTS 250
Kontaktdaten:

Problem bei Tastaturabfrage im 3D-modus

Beitrag von Marvin133 »

Ich bräuchte einmal hilfe von euch.und zwar ich habe ein kleines sprites welches ich per tastendruck springen lassen will und somit habe ich ein funktion erstellt mit der ich das machen kann nur wenn ich das programm starte und ich die space taste drücke passiert rein gar nichts ich hoffe ihr könnt das probelm finden.

Code: Alles auswählen

If InitSprite() = 0 Or InitKeyboard() = 0
  MessageRequester("Error", "Can't open DirectX 7 or later", 0)
  End
EndIf


If InitSound() = 0
  MessageRequester("Error", "Can't open DirectX 7 Or Sound Card is not present", 0)
  End
EndIf

OpenWindow(0, 0, 0,500,300, "Mario Shooter I", #PB_Window_SystemMenu | #PB_Window_MaximizeGadget | #PB_Window_MinimizeGadget | #PB_Window_SizeGadget)
OpenWindowedScreen(WindowID(0), 0, 0,500,300, 1, 1, 20) 



Event=WaitWindowEvent()

;Loading Sprites
LoadSprite(0,"Data\GFX\background.bmp",0)
LoadSprite(1,"Data\GFX\player-1.bmp",0)
LoadSprite(2,"Data\GFX\crosshair.bmp",0)


;Structures
Structure Player
  x.w
  y.w
  life.w
EndStructure


;Lists


;Global Variables
Global x,y

;Functions


Procedure Jump()
  For i=0 To 100 Step 1
  y=y-1
  Next
  For i=0 To 100 Step 1
  y=y+1
  Next
  DisplaySprite(1,x,y)
EndProcedure


;Variables
  ende=0
  
  life=100
  x=100
  y=100
  

;Main Loop
While ende=0



ExamineKeyboard()


If KeyboardPushed(#PB_Key_Escape)
   Event=#PB_Event_CloseWindow
   ende=1
EndIf 



ClearScreen(0)

;Display Background
DisplaySprite(0,0,0)

;Display Player
DisplaySprite(1,x,y)

If KeyboardReleased(#PB_Key_Space)
   Jump()
EndIf

FlipBuffers()

Wend
Win 7 Home Premium 64 Bit \ PB 4.41 Demo\2.8Ghz QuadCore \4GB RAM\ nVidia GTS 250

Bild
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7028
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Kleine Hilfe beim Programmieren

Beitrag von STARGÅTE »

es passiert nix, weil auch nix gemacht wird ... :wink:

Code: Alles auswählen

Procedure Jump()
  For i=0 To 100 Step 1
  y=y-1
  Next
  For i=0 To 100 Step 1
  y=y+1
  Next
  DisplaySprite(1,x,y)
EndProcedure
in einer Schleife lässt du y kleiner werden, und danahc sofort wieder größer, ohne das das Sprite diese Koordinatenänderung erfährt!

Das heißt, eine Änderung deiner Variablen (x,y) musst du auch dem Sprite mitteilen.
Diese Änderung muss also in der Hauptschleife erfolgen.

Bei KeyboardReleased() könnte zB eine Variable auf 1 gesetzt werden, welche den y-Wert in der Hauptschleife bei jedem Zyklus erhöht und dann wieder verkleinert.
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
Marvin133
Beiträge: 80
Registriert: 25.01.2010 15:51
Computerausstattung: Win 7 Home Premium 64 Bit \ PB 4.41 Demo\2.8Ghz QuadCore \4GB RAM\ nVidia GTS 250
Kontaktdaten:

Re: Kleine Hilfe beim Programmieren

Beitrag von Marvin133 »

Leider funzt das immer noch nciht :(
Win 7 Home Premium 64 Bit \ PB 4.41 Demo\2.8Ghz QuadCore \4GB RAM\ nVidia GTS 250

Bild
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7028
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Kleine Hilfe beim Programmieren

Beitrag von STARGÅTE »

Leider funzt das immer noch nciht
Tia, du hast ja auch nix am Code oben verändert !

Hier n Beispiel von mir (nicht unbedingt n Vorbild, aber es ist n Möglichkeit):

Code: Alles auswählen

InitSprite()
InitKeyboard() 

OpenWindow(0, 0, 0, 800, 600, "Beispiel", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
OpenWindowedScreen(WindowID(0), 0, 0, 800, 600, 0, 0, 0)
 
  CreateSprite(0, 50, 50)
  StartDrawing(SpriteOutput(0))
    Box(0,0,50,50,$FFFFFF)
  StopDrawing()
 
Global x.f = 100 , y.f = 500
 
#JumpSpeed = 50 : #JumpHeight = 200
 
Repeat

  Event = WaitWindowEvent(5)

  ClearScreen(0)

    If Jump : Jump - 1 : EndIf
    DisplaySprite(0, x, y-Sin(Jump*#PI/#JumpSpeed)*#JumpHeight)

  FlipBuffers()

  ExamineKeyboard()
  If KeyboardPushed(#PB_Key_Escape) : End : EndIf
  If KeyboardReleased(#PB_Key_Space) And Not Jump : Jump = #JumpSpeed : EndIf

Until Event = #PB_Event_CloseWindow
Beim drücken von Space, wird eine Variable auf einen Wert gesetzt, dieser "tickt" dann wieder runter auf Null.
Eine Funktion (hier Sinus) wandelt diese Zeit in eine Bewegung um und änder damit die Position des Sprites.
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Antworten