none
Hilfe beim verstehen...

    Frage

  • Hallo, ich versuche mich gerade in der Programmierung eines Landkartenprogramms, als Beispiel habe ich folgendes gefunden:

    http://www.codeproject.com/script/Articles/ViewDownloads.aspx?aid=87944

    Nun zu meiner ersten Frage, wie schafft es der Autor das die Tiles die heruntergeladen werden an der richtigen Position sind, woher weis das Programm das nur die Tiels im sichtbaren Ausschnitt heruntergeladen werden müssen... 

    Ich versuche gerade es nachzubauen um es zu verstehen, aber ein Canvas ist ja schließlich ein Container.

    Ich habe bei mir in das Canvas mehrere Image's eingefügt um die Position der Tiels richtig zu definieren....

    Danke

    Sonntag, 3. August 2014 14:04

Antworten

  • Hallo,
    ich habe mich nicht näher mit dem Projekt aus einander gesetzt, grundsätzlich lläuft es aber wie foglt ab:

    Die Karte liegt auf einem Koordinatensystem. Beim starten wird beispielweise alles zwischen (0|0) und (1|1) angezeigt. Wenn man nun auf den Faktor 200% heran zoomt, wird der Ausschnitt von (0,25|0,25) bis (0,75|0,75) angezeigt. Beim hinein zoomen genau anders herum.
    Wenn die Karte nun verschoben wird, verschiebt sich das KS.

    Nun weiß das Programm das ein Kartenabschnitt 0,1 * 0,1 groß ist. Dadurch weiß es das es ohne Verschiebung bei 200% Zoom die Kartenabschnitte von 0,6|0,6 bis 0,7|0,7 downloaden muss.

    Nun ist noch die Frage, wie die Abschnitte in dem Canvas angezeigt werden. Mit ImageControls dürfte es am einfachsten gehen. Dabei bekommt jedes Imagecontrol einen Kartenabschnitt zugewiesen und wird durch Canvas.Set* und durfch die Height- und Width-Eigenschaft positioniert.
    Wenn ein Image heraus geschoben wird, brauchst du es nicht löschen oder ausblenden. Denn wenn der Abschnitt wieder sichtbar wird, ist das Bild noch immer da. WPF rendert das Image-Control sowieso nicht mit, wenn es nicht sichtbar wäre.

    PS: Die Image-Controls musst du natürlich dynamisch im Codebehind definieren. Durch eine Intelligente benennung kannst du später einfach Kartenabschnitte wieder finden. (Beispielsweise die Koordinaten des Kartenabschnitts als Name ("1|1").)


    Tom Lambert - C# MVP
    Bitte bewertet- und markiert Beiträge als Antwort. Danke.
    Nützliche Links: .NET Quellcode | C# ↔ VB.NET Konverter
    Ich: Webseite | Code Beispiele | Facebook | Twitter | Snippets

    • Als Antwort markiert Berg2381troll Dienstag, 5. August 2014 19:16
    Sonntag, 3. August 2014 16:31