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