Воскресенье, 17 Ноября 2024, 16:39

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

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
C# помогите
LabirintikДата: Понедельник, 11 Августа 2014, 06:29 | Сообщение # 1
постоянный участник
Сейчас нет на сайте
Код
        public bool move(int newx, int newy,int width2, int height2)
          {
              Rectangle entity;
              entity = new Rectangle(newy * 32, newy * 32, this.height, this.width);
              foreach (Block n in Game1.Block)
              {
                  Rectangle block;
                  block = new Rectangle(n.x * 32, n.y * 32, 32, 32);
                  if (block.Intersects(entity))
                  {
                      return false;
                  }
                  else if (entity.Intersects(block))
                  {
                      return false;
                  }

              }
              this.x = newx;
              this.y = newy;
              return true;
          }

Вот код перемещение, ну он гад блоки не видит, в чём может быть причина.


Сообщение отредактировал Labirintik - Понедельник, 11 Августа 2014, 06:30
ant0NДата: Понедельник, 11 Августа 2014, 07:56 | Сообщение # 2
постоянный участник
Сейчас нет на сайте
не знаокм с С#, но попробую рассуждать логически

Код
              foreach (Block n in Game1.Block)   
                {   
                    Rectangle block;   
                    block = new Rectangle(n.x * 32, n.y * 32, 32, 32);

тут ты перебираешь все блоки и каждый раз переназначаешь переменную block. Т.е block по факту у тебя только один - самый последний
получается, если последний блок не пересекается с entity, то функция возвратит true.

Я бы сделал массив block

Могу, конечно, глубоко ошибаться.


Blender 3D, Godot Engine, LUA

Сообщение отредактировал ant0N - Понедельник, 11 Августа 2014, 08:00
ZnOFFДата: Понедельник, 11 Августа 2014, 08:57 | Сообщение # 3
частый гость
Сейчас нет на сайте
ant0N, foreach перебирает экземпляры в коллекции. Каждую итерацию n - это следующий элемент. Здесь всё верно.

Цитата Labirintik ()
entity = new Rectangle(newy * 32, newy * 32, this.height, this.width);


А где же newX? два раза использован newY...
Не перепутаны случайно Width и Height местами? Кроме того, в метод передаются width2 и height2, которые у Вас не используются, хотя по смыслу фрагмента кода вроде как должны(возможно Вы путаете что такое this - это текщий экземпляр класса, а не контекст метода).
Ещё конструкция if у вас странная. Вроде как одной проверки на пересечение достаточно. Если A пересекается с B, то и B пересекается с A.


Сообщение отредактировал ZnOFF - Понедельник, 11 Августа 2014, 09:01
LabirintikДата: Понедельник, 11 Августа 2014, 14:08 | Сообщение # 4
постоянный участник
Сейчас нет на сайте
Цитата ZnOFF ()

А где же newX? два раза использован newY...
Не перепутаны случайно Width и Height местами? Кроме того, в метод передаются width2 и height2, которые у Вас не используются, хотя по смыслу фрагмента кода вроде как должны(возможно Вы путаете что такое this - это текщий экземпляр класса, а не контекст метода).
Ещё конструкция if у вас странная. Вроде как одной проверки на пересечение достаточно. Если A пересекается с B, то и B пересекается с A.


Я вторую уже сделал, когда не увидел рабочий столкновение, спасибо за помощь, а width2 и height2 остались от старого кода
  • Страница 1 из 1
  • 1
Поиск:

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