| |

VB.NET - Ein- und UmsteigerBitmap ohne Flackern bewegen | |  | Autor: Logo | Datum: 22.02.10 18:32 |
| Hallo,
da man mir das letzte Mal hier ganz fantastisch geholfen hat, traue ich mich (VB.NET-mäßig immer noch ziemlich grün hinter den Ohren), noch einmal um Hilfe zu bitten.
Im Rahmen eines therapeutischen Spiels für junge Kinder gibt es ein kleines Belohnungsspiel, in welchem eine mit den Pfeiltasten gesteuerte Biene versucht, mit nach oben gereckten Stachel möglichst viele der von oben ins Bild schwebenden Luftballone zum Platzen zu bringen. Ich hatte diese kleine Spiel vor Jahren schon in VB6 programmiert und für alles Sich-Bewegende Imageboxen genommen, weil die ja volle Transparenz boten, auch dann, wenn sich 2 davon kreuzten. In VB.Net lässt sich das (das Web ist ja voll davon) leider nicht so ohne weiteres übertragen, aber nach etlichen Stunden Suchens habe ich herausgefunden, dass man diese Transparenz prima hinbekommt, wenn man die mit den Microsoft Power Packs 3.0 erhältlichen Shape-Controls benutzt und die gewünschten GIFs dort als BackgroundImage einlädt. Hierbei ist zu beachten, dass sich alle diese Shapes im gleichen ShapeContainer befinden.
So weit, so gut, d. h. in ganz vielen Fällen ist das eine prima Lösung, wenn sich Bitmaps überlappen sollen; und ich konnte das alte Programm dann schnell nachbauen. Aber nun taucht mein eigentliches Problem auf: Im Gegensatz zu VB6 flackert das Ganze enorm, und blöderweise haben die Shape-Controls kein DoubleBuffer-Member.
Ich habe daher im Web gesucht und auch eine Möglichkeit gefunden, Bitmaps mit BackBuffering (über Tasten oder Timer gesteuert) ruckelfrei über den Bildschirm zu bewegen. Alles klappt: Das Image hat die richtige Größe und bewegt sich an die richtige Stelle.
Allerdings bleiben die jeweils zuvor gezeichneten Images jedesmal bestehen, so dass das jeweilige Bild einen richtigen Schweif bekommt. Ich bin einfach zu dusselig, um das wegzubekommen. Hier mal das was ich (auf der Basis meinerr Suchergebnisse) habe (die Original-Kommentare des Autors lasse ich mal drin):
Public Sub Backbuffering(ByVal bmpImage As Bitmap, ByVal rect As Rectangle)
Dim BackBuffer As New Bitmap(bmpImage)
Dim DrawingArea As Graphics = Graphics.FromImage(BackBuffer)
Dim Printable As Graphics = Me.CreateGraphics()
Dim Viewable As Graphics = Me.CreateGraphics()
' Next, you want to draw to your graphics object as normal,
' so DrawingArea.Clear(Color.Black) and such.
'DrawingArea.Clear(Color.Navy)
Printable.DrawImage(bmpImage, rect)
' Once you've completed drawing the object that you want to
' smoothly move, simply draw the pre-rendered bitmap over the top
' of the Graphics object you want to update:
Viewable.DrawImage(BackBuffer, rect)
End Sub Über rect wird immer die neue Position bzw. die Größe der zu bewegenden Bitmap übergeben, das funktioniert gut.
Irgendwo fehlt wohl das von mir auskommentierte DrawingArea.Clear, aber an welcher Stelle ich das auch aktiviere: Mein schönes Image ist verschollen...
Wo ist bitte mein Denkfehler?
Für Eure Hilfe im Voraus ganz herzlichen Dank !!!
Logo |  |
 | Sie sind nicht angemeldet! Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.
Einloggen | Neu registrieren |
  |
|
Neu! sevCoolbar 3.0 
Professionelle Toolbars im modernen Design!
Mit sevCoolbar erstellen Sie in wenigen Minuten ansprechende und moderne Toolbars und passen diese optimal an das Layout Ihrer Anwendung an (inkl. große Symbolbibliothek) - für VB und MS-Access Weitere InfosTipp des Monats TOP Entwickler-Paket 
TOP-Preis!!
Mit der Developer CD erhalten Sie insgesamt 24 Entwickler- komponenten und Windows-DLLs. Die Einzelkomponenten haben einen Gesamtwert von 1866.50 EUR...
Jetzt nur 979,00 EURWeitere Infos
|
|
|
Copyright ©2000-2025 vb@rchiv Dieter Otter Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.
Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel
|
|