Seite 1 von 1

Problem bei Tastaturabfrage im 3D-modus

Verfasst: 16.03.2010 14:46
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

Re: Kleine Hilfe beim Programmieren

Verfasst: 16.03.2010 15:21
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.

Re: Kleine Hilfe beim Programmieren

Verfasst: 16.03.2010 17:53
von Marvin133
Leider funzt das immer noch nciht :(

Re: Kleine Hilfe beim Programmieren

Verfasst: 16.03.2010 18:08
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.