CreateImage und trotzdem keine Bilder?

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

M0rgenstern

Betreff: CreateImage und trotzdem keine Bilder?

BeitragSo, Aug 02, 2009 23:17
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo.

Ich habe ein kleines Problem mit CreateImage...
Das was die Boardsuche zu Tage gefördert hat, hilft mir nichts.

Also, ich lasse zwei Bilder per Createimage erstellen ung setze danach wieder den Backbuffer.
Wenn ich jetzt die Bilder zeichnen lassen will, dann scheint es als ob alles hängt.
Der Bildschirmhintergrund wird zwar grau, aber die (weißen) Bilder werden nicht gemalt.
In die Hauptschleife tritt er ein, 1. Ich habs mit Stop versucht und 2. Nur dort kann ich mit ESCAPE abbrechen, und das klappt auch wunderbar.

Hier der Code:

Code: [AUSKLAPPEN]
AppTitle "Snake"
Graphics 800,600,32,2

ClsColor 50,50,50
Cls


Global FTimer = CreateTimer(50)

Type TStein
   Field Sx#
   Field kaputt
   Field Sy#
End Type


For x = 0 To ((GraphicsHeight()/2)/50)
 For i = 0 To (GraphicsWidth()/100)
   Stein.TStein = New TStein
   Stein\Sx# = i * 101
   Stein\Sy# = x * 51
 Next
Next

Type TBall
   Field Bx#
   Field By#
   Field BWinkel#
   Field BSpeed#
   Field BBild
End Type

Type TPlayer
   Field Px#
   Field Py#
   Field PLifes
   Field PSpeed#
   Field PBild
End Type

Global Spieler.TPlayer = New TPlayer
   Spieler\Px# = GraphicsWidth()/2
   Spieler\Py# = GraphicsHeight() - 13
   Spieler\PLifes = 3
   Spieler\PSpeed# = 4
   Spieler\PBild = CreateImage(50, 10)
   

SetBuffer ImageBuffer(Spieler\PBild)

Color 255,255,255

Rect Spieler\Px#, Spieler\Py#, 50, 10, 1


Global Ball.TBall = New TBall
   Ball\Bx# = GraphicsWidth()/2
   Ball\By# = GraphicsHeight() - 30
   Ball\BSpeed# = 3
   Ball\BWinkel# = Rand(45,105)
   Ball\BBild = CreateImage(10,10)
   
   
SetBuffer ImageBuffer(Ball\BBild)

Color 255,255,255

Oval Ball\Bx#, Ball\By#, 10, 10, 1

SetBuffer BackBuffer()

ClsColor 50,50,50
Cls


Repeat
 WaitTimer FTimer
   Cls
   
   SpielerSteuerung()
   KugelBewegen()
   AllesZeichnen()
   

 Flip
Until KeyDown(1)





Function SpielerSteuerung()

   If KeyDown(203) And (Spieler\Px# > 2) Then Spieler\Px# = Spieler\Px# - Spieler\PSpeed#
   If KeyDown(205) And (Spieler\Px# < (GraphicsWidth()-51)) Then Spieler\Px# = Spieler\Px# + Spieler\PSpeed#

End Function


Function KugelBewegen()

   Ball\Bx# = Ball\Bx#+Cos(Ball\BWinkel#)*Ball\BSpeed#
   Ball\By# = Ball\By#-Sin(Ball\BWinkel#)*Ball\BSpeed#
   
   If Ball\Bx# <= 3 Then Ball\BWinkel# = 180-Ball\BWinkel#
   If Ball\Bx# >= (GraphicsWidth()-13) Then Ball\BWinkel# = 180 - Ball\BWinkel#
   If Ball\By# <= 3 Then Ball\BWinkel# = 360-Ball\BWinkel#
   
   ;If ImagesCollide(Ball\BBild, Ball\Bx#, Ball\By, 0, Spieler\PBild, Spieler\Px#, Spieler\Py#, 0) Then
   ;   Ball\BWinkel# = 360-Ball\BWinkel#
   ;EndIf


End Function


Function AllesZeichnen()

   DrawImage Spieler\PBild, Spieler\Px#, Spieler\Py#
   
   DrawImage Ball\BBild, Ball\Bx#, Ball\By#
   
   ;For Stein.TStein = Each TStein
   ;   Rect Stein\Sx#, Stein\Sy#, 99, 49, 1
   ;Next

End Function




Hoffe ihr könnt mir helfen.

Lg, M0rgenstern

Xeres

Moderator

BeitragSo, Aug 02, 2009 23:25
Antworten mit Zitat
Benutzer-Profile anzeigen
Nur kurz rauf geschaut, aber das hier sieht komisch aus:
BlitzBasic: [AUSKLAPPEN]
Spieler\Px# = GraphicsWidth()/2
Spieler\Py# = GraphicsHeight() - 13
Spieler\PBild = CreateImage(50, 10)

Rect Spieler\Px#, Spieler\Py#, 50, 10, 1

Das Bild beginnt bei den Koordinaten 0,0 und endet bei 49, 9 - Da X und Y weit von diesem Bereich entfernt liegen, zeichnest du nicht auf den sichtbaren Bereich des Bildes.
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)

M0rgenstern

BeitragSo, Aug 02, 2009 23:49
Antworten mit Zitat
Benutzer-Profile anzeigen
ich dachte das hinter Createimage sei die GRÖSSE des Bildes (so stehts in der Hilfe).

Lg, M0rgenstern

Xeres

Moderator

BeitragSo, Aug 02, 2009 23:55
Antworten mit Zitat
Benutzer-Profile anzeigen
Das ist ja auch richtig.
Wenn die Auflösung aber bei 800x600 liegt, zeichnest du vom punkt 400, 587 aus ein Rechteck in der Größe des Bildes... Da das Bild aber nur bis 49, 9 geht, ist es schlicht außerhalb des Bildes.
Du siehst ja auch nichts, was du außerhalb des Bildschschirm zeichnest.
Probier:
BlitzBasic: [AUSKLAPPEN]
Rect 0, 0, 50, 10, 1
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)
 

n-Halbleiter

BeitragSo, Aug 02, 2009 23:55
Antworten mit Zitat
Benutzer-Profile anzeigen
Das ist es. Allerdings zeichnest du das Rect außerhalb des Bildes (bei GraphicsWidth()/2,GraphicsHeight()-13). Du musst Code: [AUSKLAPPEN]
Rect 0,0,50,10,1
machen. So wird das Rechteck bei 0,0 gezeichnet, und nicht irgendwo in der Pampa. Wink
mfg, Calvin
Maschine: Intel Core2 Duo E6750, 4GB DDR2-Ram, ATI Radeon HD4850, Win 7 x64 und Ubuntu 12.04 64-Bit
Ploing!
Blog

"Die Seele einer jeden Ordnung ist ein großer Papierkorb." - Kurt Tucholsky (09.01.1890 - 21.12.1935)

hectic

Sieger des IS Talentwettbewerb 2006

BeitragSo, Aug 02, 2009 23:59
Antworten mit Zitat
Benutzer-Profile anzeigen
Was Xeres dir zu erklären versucht ist folgendes:


Spieler\Px# = GraphicsWidth()/2 = 800/2 = 400
Spieler\Py# = GraphicsHeight()-13 = 600-13 = 587

Sowohl x=400 als auch y=587 befinden sich außerhalb des Bildes welches du mit nur x=50, y=10 erstellst

Spieler\PBild = CreateImage(50, 10)

Erste Rätselslösung ist folgendes umzustellen:

Rect 0, 0, 50, 10, 1
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D

M0rgenstern

BeitragMi, Aug 05, 2009 16:38
Antworten mit Zitat
Benutzer-Profile anzeigen
Hey, danke. Jetzt hab ichs verstanden.

Ich hab jetzt aber mal ne Frage, was mir aufgefallen ist.

Ich hab jetzt in dem einen Type (TStein) ein Feld Bild.

Hier werden ja die Steine erstellt:

Code: [AUSKLAPPEN]
Type TStein
   Field Sx#
   Field kaputt
   Field Sy#
   Field SBild
End Type



For x = 0 To ((GraphicsHeight()/2)/50)
 For i = 0 To (GraphicsWidth()/100)
   Stein.TStein = New TStein
   Stein\Sx# = i * 101
   Stein\Sy# = x * 51
        Stein\SBild = Createimage(99,49)
 Next
Next


und hier wird das Bild dann auf den Buffer gemalt:

Code: [AUSKLAPPEN]
For Stein.TStein = Each TStein
   SetBuffer ImageBuffer(Stein\SBild)

   Color 255,255,255   
   Rect 0, 0, 99, 49, 1
Next


Aber das kann doch eigentlich nicht sein, dass ich für JEDEN Stein ein extra Bild erstellen muss, ein Bild für jeden Stein würde doch reichen, oder?

Lg, M0rgenstern

DaysShadow

BeitragMi, Aug 05, 2009 16:47
Antworten mit Zitat
Benutzer-Profile anzeigen
BlitzBasic: [AUSKLAPPEN]
Global SteinBild = CreateImage(99, 49)

SetBuffer ImageBuffer(SteinBild)

Color 255,255,255
Rect 0, 0, 99, 49, 1

For x = 0 To ((GraphicsHeight()/2)/50)
For i = 0 To (GraphicsWidth()/100)
Stein.TStein = New TStein
Stein\Sx# = i * 101
Stein\Sy# = x * 51
Stein\SBild = SteinBild '<-------!
Next
Next



So würde ich das machen, falls das so geht.
Wie immer weiß ich nicht ob es so richtig ist.

MfG DaysShadow
Blessed is the mind too small for doubt

M0rgenstern

BeitragMi, Aug 05, 2009 16:57
Antworten mit Zitat
Benutzer-Profile anzeigen
Ha... Genau sowas mein ich.

Dankeschön.

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group