DrawImage Problem (?)

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

 

buja

Betreff: DrawImage Problem (?)

BeitragMi, Apr 30, 2008 18:03
Antworten mit Zitat
Benutzer-Profile anzeigen
Sorry ich weiß nicht genau wo der Fehler liegt, aber ich tippe auf DrawImage().
Naja, ich will einen Pong Klon machen, dann hab ich den Type gemacht mit einer x,y Variable für den Ball und eine dx,dy variable, die bestimmt, wieviel pixel pro frame zum ball hinzugefügt werden sollen. Aber es wird nix angezeigt -.-

Leider muss ich den ganzen Code posten, tut mir leid, ich weiß ja nicht wo der fehler ist.

Also hier die Main Code:
Code: [AUSKLAPPEN]

include "functions.bb"

;=========================================================================
;GraphicModus lesen
Const x = 1600
Const y = 1024
Const z = 32
Const mode = 1

;=========================================================================



Graphics x,y,z,mode
SetBuffer BackBuffer()
SeedRnd MilliSecs

Global version# = 0.01
Global timer = CreateTimer (60)
AppTitle "Ultra-Pong " + version#
AutoMidHandle True

Global fpsrate,loops, fpstime ;FÜR DEN FPS-COUNTER


;=========================================================================
;Player Type und Ball Type
Type player
   Field x,y,speed,image
End Type

Type ball
   Field x,y,dx,dy,richtung,image
End Type


;=========================================================================
;Load Player and Ball Images
Global player1.player = New player
Global player2.player = New player
Global ball.ball = New ball


player1\image = LoadImage ("pics\player1.bmp")
player2\image = LoadImage ("pics\player2.bmp")
ball\image = LoadImage ("pics\ball.bmp")


;=========================================================================
;MAIN LOOP
newgame ()

While Not KeyDown (1)
   Cls
   updateball()
   draw()
   
   drawhud()
   fpslimit()
   Flip
Wend


UNd hier die Include Datei mit den Functions:


Code: [AUSKLAPPEN]

unction newgame()
   ;Spielerdaten reseten
   player1\x = GraphicsWidth()*0.015625 ;Faktor damit der Abstand immer 25 bleibt^^
   player2\x = GraphicsWidth() - GraphicsWidth()*0.015625 ;Faktor damit der Abstand immer 25 bleibt
   player1\y = GraphicsHeight()/2
   player1\speed = 10
   player2\y = GraphicsHeight()/2
   player2\speed = 10
   
   ;Balldaten reseten
   ball\x = GraphicsWidth()/2
   ball\y = GraphicsHeight()/2
   ball\richtung = Rand (1,4)
   
   Select ball\richtung
      Case 1
         ball\dx = 5 And ball\dy = 5
      Case 2
         ball\dx = 5 And ball\dy = -5
      Case 3
         ball\dx =-5 And ball\dy = 5
      Case 4
         ball\dx =-5 And ball\dy = -5
   End Select
   
End Function



Function draw()
   ;zeichnet alles ^^
   DrawImage player1\image,player1\x,player1\y
   DrawImage player2\image,player2\x,player2\y
   DrawImage ball\image,ball\x,ball\y
End Function


Function fpslimit()
   WaitTimer timer
End Function


Function fps()
   loops = loops+1
   If MilliSecs() - fpstime > 1000 Then
      fpsrate = loops
      loops = 0
      fpstime = MilliSecs()
   End If
   Return fpsrate
   
End Function


Function drawhud()
   Text 0,0,"Positions:"
   Text 0,12,"Player1: " + player1\x + ", " + player1\y
   Text 0,24,"Player2: " + player2\x + ", " + player2\y
   Text 0,36,"Ball: " + ball\x + ", " + ball\y
   Text 0,48,"FPS-COUNTER: " + fps()
End Function

Function updateball()
   ball\x = ball\x + ball\dx
   ball\y = ball\y + ball\dy
End Function



Ich hoffe, dass der Fehler nicht so dumm ist, und ich eure zeit nicht verschwende damit.
Falls es das falsche Forum ist, tut mir das leid, aber ich weiß ja nicht wo der Fehler liegt.
  • Zuletzt bearbeitet von buja am Mi, Apr 30, 2008 19:30, insgesamt einmal bearbeitet
 

Lador

BeitragMi, Apr 30, 2008 18:09
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich würde sagen: x und y müssen Floats sein, weil du ja

Code: [AUSKLAPPEN]
player\x = GraphicsWidth()*0.015625


Ich habe das mal ausprobiert:

Code: [AUSKLAPPEN]

Graphics 1400,900,32,2
x = GraphicsWidth()*0.000155436454
Print x
WaitKey


Und bei mir kommt da 0 raus (weil ja eigentlich eine Fließkommazahl erwartet wird.

MFG Lador
 

buja

BeitragMi, Apr 30, 2008 18:19
Antworten mit Zitat
Benutzer-Profile anzeigen
Sorry, die Lösung funktioniert doch net.
Ich hab für alle xyz vom Ball und dx und dy Float eingesetzt, also das # hinter die Variable beim definieren von Field.
Geht aber immer noch net

Hier der aktualisierte Code:

Code: [AUSKLAPPEN]

Graphics x,y,z,mode
SetBuffer BackBuffer()
SeedRnd MilliSecs

Global version# = 0.01
Global timer = CreateTimer (60)
AppTitle "Ultra-Pong " + version#
AutoMidHandle True

Global fpsrate,loops, fpstime ;FÜR DEN FPS-COUNTER


;=========================================================================
;Player Type und Ball Type
Type player
   Field x#,y#,speed,image
End Type

Type ball
   Field x#,y#,dx#,dy#,richtung,image
End Type


;=========================================================================
;Load Player and Ball Images
Global player1.player = New player
Global player2.player = New player
Global ball.ball = New ball


player1\image = LoadImage ("pics\player1.bmp")
player2\image = LoadImage ("pics\player2.bmp")
ball\image = LoadImage ("pics\ball.bmp")


;=========================================================================
;MAIN LOOP
newgame ()

While Not KeyDown (1)
   Cls
   updateball()
   draw()
   
   drawhud()
   fpslimit()
   Flip
Wend



Include Datei:
Code: [AUSKLAPPEN]

Function newgame()
   ;Spielerdaten reseten
   player1\x# = GraphicsWidth()*0.015625 ;Faktor damit der Abstand immer 25 bleibt^^
   player2\x# = GraphicsWidth() - GraphicsWidth()*0.015625 ;Faktor damit der Abstand immer 25 bleibt
   player1\y# = GraphicsHeight()/2
   player1\speed = 10
   player2\y# = GraphicsHeight()/2
   player2\speed = 10
   
   ;Balldaten reseten
   ball\x# = GraphicsWidth()/2
   ball\y# = GraphicsHeight()/2
   ball\richtung = Rand (1,4)
   
   Select ball\richtung
      Case 1
         ball\dx# = 5 And ball\dy# = 5
      Case 2
         ball\dx# = 5 And ball\dy# = -5
      Case 3
         ball\dx# =-5 And ball\dy# = 5
      Case 4
         ball\dx# =-5 And ball\dy# = -5
   End Select
   
End Function



Function draw()
   ;zeichnet alles ^^
   DrawImage player1\image,player1\x#,player1\y#
   DrawImage player2\image,player2\x#,player2\y#
   DrawImage ball\image,ball\x#,ball\y#
End Function


Function fpslimit()
   WaitTimer timer
End Function


Function fps()
   loops = loops+1
   If MilliSecs() - fpstime > 1000 Then
      fpsrate = loops
      loops = 0
      fpstime = MilliSecs()
   End If
   Return fpsrate
   
End Function


Function drawhud()
   Text 0,0,"Positions:"
   Text 0,12,"Player1: " + player1\x# + ", " + player1\y#
   Text 0,24,"Player2: " + player2\x# + ", " + player2\y#
   Text 0,36,"Ball: " + ball\x# + ", " + ball\y#
   Text 0,48,"FPS-COUNTER: " + fps()
End Function

Function updateball()
   ball\x# = ball\x# + ball\dx#
   ball\y# = ball\y# + ball\dy#
End Function



Sorry habs grad probiert und ging doch nicht Confused
Hat noch jemand ne idee woran das liegen könnte?
Es passiert nämlich rein gar nichts, obwohl der Ball eigentlich in eine Richtung laufen sollte[/code]
...

Xeres

Moderator

BeitragMi, Apr 30, 2008 21:22
Antworten mit Zitat
Benutzer-Profile anzeigen
Zwei Bemerkungen dazu:
Bei Rechnungen mit Floats muss man auch Floats benutzen, d.h. endweder durch einen Punkt oder float() als solche kenntlich machen.Code: [AUSKLAPPEN]
Print 5 / 2
Print 5 / 2.0 ;*** bzw. 5 / float(2)
WaitKey

Aber viel wichtiger noch:
Code: [AUSKLAPPEN]
ball\dx# = 5 And ball\dy# = 5
and ist nicht für die Verknüpung zweier Befehle gedacht, ersetze das da durch ein Doppelpunkt ( : ), sonst wird der Kompiler das ganze missverstehen...
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)
 

buja

BeitragMi, Apr 30, 2008 22:08
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke, jetzt klappt es, auch wenn ich den Ball nicht sehe, was wohl eher an der DX und DY Variable liegt, die zu groß ist^^


Das mit den Floats werde ich mir merken, danke an den Vorposter, der mich an das Floatproblem aufmerksam gemacht hat.

Und auch das mit dem and Befehl merke ich mir für die Zulunft.
Ich wusste zwar dass : verwenden kann, aber nicht dass es mit and nicht geht^^

Danke an euch zwei Wink
...

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group