C#, XNA - Мучение с картой 2D.

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by asdzz, 17 Jun 2013.

  1. asdzz

    asdzz New Member

    Joined:
    13 Apr 2011
    Messages:
    2
    Likes Received:
    3
    Reputations:
    0
    Привет, люди добрые! Прошу помощи, ибо уже зае... эмм... устал.
    Ситуация следующая:
    Задача у меня написать карту интерактивную. Ну типа карта страны, чтобы её можно было зуммировать и таскать. На ней будут города, кликнув по которым можно будет прочитать инфо о этом городе. После ОЧЕНЬ долгих мытарств и попыток (начинал с Виндоуз.Формс) пришел к выводу, что красивее всего и эффективнее будет сделать на XNA. Ну типа как 2Д-игру. Вобщем карта у меня большая 12288 на 7680 пикселей. Это разрешение - наиболее глубокий зум, т.е. последний из тех, который будет доступен пользователю. Состоит карта из тайлов общим количеством 1440 шт. Эти тайлы я подгружаю в список текстур в LoadContent() методе приложения. Потом в Draw() вывожу по одному в определённых координатах для каждого - получается сложенная карта. Дальше мне надо было сделать чтобы она была тягаема - тут все просто - менял позицию камеры. А дальше самое интересное- пытаюсь сделать зумм для карты. Делаю в классе камеры матрицу, в которой есть Matrix.CreateScale(). Все отлично, она зуммируется НО! НО БЛЯТЬ! При зуммировании на уменьшение карта в определенный момент карта становится меньше экрана, т.е. становится видно синий фон приложения. Кроме того, есть ещё какой-то глук, который проявляется даже когда карта не меньше размера экрана - просто когда тягаешь её, она как-будто плавает по екрану, т.е. грубо говоря, выглядит это как я таксаю экранчик по синему фону, а в этом экранчике ещё и карта таскается, т.е. они оба таскаются. Я понимаю, что "экранчик" - это область обозрения камеры, но вот как с ней быть - ума не приложу, уже три дня в инете ищу, кучу всего перепробовал, но не получается. Кто знает - помогите плиз. Мой вопрос в следующем: Как сделать "объектив" (или "прямоугольник обзора") камеры фиксировнаным на весь экран, чтобы при тягании или зуммировании он не уползал в сторону и не уменьшался меньше размеров экрана. Ещё добавлю, что до того, как прикручивать зум, у меня уже было настроено таскание и углы карты не отрывались от углов экрана (не было видно фона приложения). Там было просто достичь этого - ставил ограничение по максимально возможному перемещению камеры в каждом направлении. Но таскание я сделал без помощи матриц, просто добавляя/вычитая к позиции камеры вектор на который переместилась мышь. А вот зум мне уже пришлось делать через матрицу, вследствии чего и вылезли эти бока. Прошу не пинать сильно, ибо в программировании я начинающий.
     
  2. Spot

    Spot Elder - Старейшина

    Joined:
    1 Mar 2007
    Messages:
    461
    Likes Received:
    38
    Reputations:
    1
    Закинь код на гитхаб и кинь линьк. Из твоего сумбурного обьяснения, мало что понятно - надо смотреть и щупать.
    XNA занимался более 2 лет тому назад, так что надо будет вспоминать.