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 остались от старого кода
|
|
| |