Grafik in Panel anzeigen

  • VB.NET

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von FreakJNS.

    Grafik in Panel anzeigen

    Hi,

    ich möchte ein Panel mit einer Grafik/Bild als Hintergrund ausstatten.
    Dazu möchte ich gerene eine "Siluette" als Grafik wählen.

    Um genauer zu werden:
    Es soll ein Schach-Spiel werden.
    D.h.: ein Panel mit "Turm-Figur" Grafik soll die Siluette des Turms darstellen sowie den weissen/schwarzen Hintergrund des Panels "hinter" der Grafik (alsp des Spielfeldes).

    Wie genau geht man da vor ?

    Aktuell habe ich "Dummy" Bilder eingefügt, die mehrfach im Panel angezeigt werden, da das Panel größer als die Grafik ist.
    Kann man eine Grafik im Panel "zentriert" darstellen, also die Grafik ist kleiner als das Panel, aber "mittig" im Panel dargestellt + die Hintergrundfarbe des Panels wird trotzdem angezeigt?

    Mit welchem Programm / Editor würde es sich anbieten eigene Grafiken zu ersetllen ?
    Ist "Gimp" bzw "Paint.Net" für soetwas geeignet ?


    mfg
    japp, sowas lässt sich wunderbar mit GDI+ machen (Tutorial in meiner Signatur^^). Zum erstellen der Grafik im zweifel MS Paint benutzen^^

    Ich würde für das Spiel ein eigenes Control basteln. Eine eigene klasse, die aussagen über eine figur macht (weiß/scharz + typ, also turm, dame UND "keine Figur") wäre nützlich. Das schachfeld beststeht dann aus einem zweidimensionalen Array vom typ Figur. leere felder bekommen demnach den typ "keine figur".
    im paint-event deines controls kannst du das ganze dann zeichnen lassen - erst die platte, dann die figuren. die logik, die prüft ob ein spielzug gültig ist und welche figuren fallen muss auch noch her..
    Hi,

    das zeichnen der Objekte wollte ich mir eigentlich sparen.

    Dafür wollte ich vorher erstellte Grafiken verwenden.

    Was mich interessiert, ist wie man den Hintergrund der Grafik im Panel transparent darstellen kann, so das die Panel Hintergrundfarbe noch zu sehen ist, bzw ob es möglich ist Grafiken in Panels "zentriert" als Bild darzustellen ohne das die Grafik das komplette Bild füllt.


    Edit:
    @Freak: um die Implementierung mache ich mir keine Sorgen, sonderen aktuell um das anzeigen der Figuren.
    mit zeichnen der objekte meinte ich eigentlich, dass die grafiken dorthin gezeichnet werden wo sie benötigt werden. dafür pictureboxen zu verwenden wäre blödsinn..

    das spielfeld könnte so realisiert werden:
    dim Spielfeld(7,7) as Feld '7, da ein array 0-basierend ist. das array hätte also 64 felder - wie ein echtes schachbrett.
    Der Typ Feld beinhaltet wie gesagt alle nötigen informationen:
    - Spielfigurtyp: Turm, dame, etc + "keineFigur" für felder auf denen keine figur stehen soll
    - Farbe: hell oder dunkel Spieler A oder B

    dieses spielfeld kannst du nun in zwei schleifen durchlaufen (im paint-event einer form oder deines controls!)
    for x = 0 to 7
    for y = 0 to 7
    'zeichnen
    next
    next


    beim zeichnen wird geprüft ob das aktuelle feld (=> spielfeld(x,y)):
    -eine grade x bzw y koordinate hat (stichwort mod). jenachdem wird der "boden" hell oder dunkel gefärbt
    - ob das feld eine figur beinhaltet, wenn ja wird diese gezeichnet

    anhand der spielfeldkoordinaten (also von 0 bis 7) kann man die pixelwerte für den bildschirm berechnen:
    angenommen das gesamte feld soll 800x800 pixel groß sein, dann liegt spielfeld(4,3) bei 400,300 pixel und ist 100x100 pixel groß..

    mit diesen angeaben ist es möglich das spielfeld mit allen figuren zu zeichnen.

    der nächste schritt wäre die spielmechanik... du musst prüfen:
    - ob ein spielzug gültig ist (darf die dame 3 felder nach links und 1 nach oben gehen? etc)
    - welche figuren "fallen" bei einem gültigen spielzug wenn sie übersprungen werden
    - gibt es einen sieger/verlierer?

    EDIT: um eine weitere frage zu beantworten: Die Grafiken lädst du ja in eine bitmap:
    dim tmpTurm as new bitmap("daten\turm.bmp")
    um nun teile dieser bitmap transparent werden zu lassen musst du einfach nur
    tmpTurm.maketransparent(color.red)
    aufrufen. Es empfiehlt sich also dieses ekelhafte rosa für die transparent-stellen zu verwenden^^ fuchsia oder wie es heißt..
    diese bitmaps kannst du dann in der zeichenschleife mittels e.graphics.drawimage(...) zeichnen. an das berechnen der position und maße denken!^^

    lg

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „FreakJNS“ ()