DrawImage Problem (?)
Übersicht

bujaBetreff: DrawImage Problem (?) |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 ![]() 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] |
||
... |
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
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![]() |
||
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 THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
buja |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 ![]() |
||
... |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group