Пятница, 26 Апреля 2024, 11:12

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Форум игроделов » Записи участника » wmysterio [5]
Результаты поиска
wmysterioДата: Пятница, 25 Апреля 2014, 08:07 | Сообщение # 1 | Тема: Снова Я ))) (и снова про XNA)
был не раз
Сейчас нет на сайте
Цитата Folleah ()
собственно, такой метод масштабирования везде используется, вроде как...
Возможно и так. Я написал только тот, который знаю. Над другим способом не приходилось думать biggrin

формула уже потом подгоняется под свои нужды. в данном методе идёт масштабирование картинки на весь экран.


Сообщение отредактировал wmysterio - Пятница, 25 Апреля 2014, 08:17
wmysterioДата: Пятница, 25 Апреля 2014, 07:47 | Сообщение # 2 | Тема: Снова Я ))) (и снова про XNA)
был не раз
Сейчас нет на сайте
Не знаю, нужно кому либо сейчас, но напишу - вдруг кому-то понадобится в будущем.

Масштабирование текстуры на мониторе происходит так:
Код
Масштаб = РазмерЭкрана / РазмерКартинки

Лучше всего использовать метод рисования Draw(..), в котором масштаб принимает Vector2 значение а не float.

Нужно всегда следить за тем, когда меняется размер монитора, чтобы картинка сама изменяла свой масштаб. Проще всего это сделать с помощью событий.

1) Создайте метод, который будет менять расширение экрана.
2) Между namespace и областью класса объявите делегат.
3) В методе вызывайте событие
4) В классе, представленной как картинка ( обычно создают класс, а не используют Texture2D ), подпишитесь на событие изменения и выполните указанный више код.

Пример:
Код
public delegate void DimensionEvent( Vector2 Size );

public class Dimension {
      public static GraphicsDeviceManager graphic;

      private static Vector2 size;
      public static event DimensionEvent DimensionChanged;
      public static Vector2 Value {
          get {
              return size;
          }
          set {
              size = value;
              graphic.PreferredBackBufferWidth = (int) size.X;
              graphic.PreferredBackBufferHeight = (int) size.Y;
              graphic.ApplyChanges();
              if ( DimensionChanged != null )
                  DimensionChanged( size );
          }
      }

      public Dimension( Vector2 Size ) {
          Value = Size;
      }

}


В классе Game1 нужно задать значение графики, чтобы класс имел доступ до методов изменения расширение экрана.
Код

          public Game1() {
              graphics = new GraphicsDeviceManager( this );
              Content.RootDirectory = "Content";
              Dimension.graphic = this.graphics;
          }

          protected override void Initialize() {
              // TODO: Add your initialization logic here

              Dimension dim = new Dimension( new Vector2( 640, 480 ) );
              base.Initialize();
          }

Класс картинки напишу кратко:
Код

      public class Picture {
          Texture2D image;
          Vector2 Zoom, size;
          Rectangle SourceRect;

          public Vector2 Size {
              get {
                  return new Vector2( image.Width, image.Height );
              }
          }

/*
content - это менеджер контента, он также должен присутствовать в классе картинки. Как вариант - установите статическое поле, чтобы получать достут к нему из любого класса.
*/

          public Picture( string Path ) {
              image = content.Load<Texture2D>( Path );

/* прочие установки по умолчанию в классе */
              Dimension.DimensionChanged += Dimension_DimensionChanged; // Делаем подписку на изменения расширения
          }

          void Dimension_DimensionChanged( Vector2 Size ) {
              Zoom = Dimension.Value / Size;
          } // Обрабатываем событие, изменяя масшаб картинки ( значение Zoom );

          public void Draw( SpriteBatch spriteBatch) {
              spriteBatch.Draw( image, position, sourceRectangle, color, rotation, origin, Zoom, SpriteEffects.None, 0.0f );
          }
        
      }

Примерно так. Я правда использую масштабирование только в меню игры, но уж никак не в самом скрине, где управлять игроком.


Сообщение отредактировал wmysterio - Пятница, 25 Апреля 2014, 07:50
wmysterioДата: Вторник, 13 Ноября 2012, 00:33 | Сообщение # 3 | Тема: Забаньте этого пользователя!
был не раз
Сейчас нет на сайте
У меня похожая ситуация. Пользователь dimon-902 поставил минус репутации, объяснив это словами: "прпр" wacko
Почитайте его комменты и вы поймёте, что это за тип и нужен ли он сайту
wmysterioДата: Пятница, 22 Июня 2012, 13:29 | Сообщение # 4 | Тема: Помогите с ГТАшкой
был не раз
Сейчас нет на сайте
Quote (AlexAngel777)
Можно и проще. Находиш txd файл с текстурой маркера и делаеш ее прозрачной.
Это тоже вариант smile Если не ошибаюсь ID 1559, имя текстуры - DIAMOND.


Сообщение отредактировал wmysterio - Пятница, 22 Июня 2012, 13:48
wmysterioДата: Воскресенье, 25 Марта 2012, 15:09 | Сообщение # 5 | Тема: Помогите с ГТАшкой
был не раз
Сейчас нет на сайте
Quote (Пророк)
а как маркеры (желтые, которые возле домов, магазинов и спортзалов) убрать?

Можно 2-ма способами. 1-й: создать cleo-скрипт. Вот код:
Code

{$VERSION 3.1.0027}

{$CLEO .cs}

// -- main ----
0000:

:CLEAR
thread 'CLEAR'
wait 0
07FB: set_interior 'FDREST1' access 0
07FB: set_interior 'REST2' access 0
07FB: set_interior 'DINER1' access 0
07FB: set_interior 'DINER2' access 0
07FB: set_interior 'TSDINER' access 0
07FB: set_interior 'CARLS' access 0
07FB: set_interior 'AMMUN1' access 0
07FB: set_interior 'AMMUN2' access 0
07FB: set_interior 'AMMUN3' access 0
07FB: set_interior 'AMMUN4' access 0
07FB: set_interior 'AMMUN5' access 0
07FB: set_interior 'BARBERS' access 0
07FB: set_interior 'BARBER2' access 0
07FB: set_interior 'BARBER3' access 0
07FB: set_interior 'FDPIZA' access 0
07FB: set_interior 'FDCHICK' access 0
07FB: set_interior 'FDBURG' access 0
07FB: set_interior 'TATTOO' access 0
07FB: set_interior 'CSCHP' access 0
07FB: set_interior 'CSSPRT' access 0
07FB: set_interior 'LACS1' access 0
07FB: set_interior 'CLOTHGP' access 0
07FB: set_interior 'CSDESGN' access 0
07FB: set_interior 'CSEXL' access 0
07FB: set_interior 'GYM1' access 0
07FB: set_interior 'GYM2' access 0
07FB: set_interior 'GYM3' access 0
07FB: set_interior 'PDOMES' access 0
07FB: set_interior 'PDOMES2' access 0
07FB: set_interior 'MADDOGS' access 0
07FB: set_interior 'MDDOGS' access 0
07FB: set_interior 'GANG' access 0
07FB: set_interior 'RCPLAY' access 0
07FB: set_interior 'PAPER' access 0
07FB: set_interior 'ABATOIR' access 0
07FB: set_interior 'LACRAK' access 0
07FB: set_interior 'GF1' access 0    
07FB: set_interior 'GF2' access 0    
07FB: set_interior 'GF3' access 0    
07FB: set_interior 'GF4' access 0    
07FB: set_interior 'GF5' access 0    
07FB: set_interior 'GF6' access 0    
0A93: end_custom_thread
Правда абсолютно все маркеры не уберутся

2-й: такую же махинацию проделать в main.scm


Сообщение отредактировал wmysterio - Воскресенье, 25 Марта 2012, 15:12
Форум игроделов » Записи участника » wmysterio [5]
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг