Методы вызываются, но код внутри них не выполняется - C#

Узнай цену своей работы

Формулировка задачи:

Пишу платформер. Метод falling отвечает за падение игрока под действием гравитации, метод checkCollision останавливает игрока, если тот столкнулся с препятствием. При попытке вызвать эти методы ничего не происходит: координаты не меняются, столкновения не проверяются (пробовал переносить код методов в код таймера - работает исправно, а в методах никак). Подскажите, где моя ошибка?
Листинг программы
  1. namespace _3d_engine
  2. {
  3. public partial class Form1 : Form
  4. {
  5. public const float gravity = 0.1f;
  6. public const float obstacleThickness = 15;
  7. List<obstacle> obstacles = new List<obstacle>();
  8. player player1 = new player(75, 35, 20);
  9. private struct player
  10. {
  11. public RectangleF model;
  12. public float Vy;
  13. public player(float x, float y, float size)
  14. {
  15. Vy = 0;
  16. model = new RectangleF(x, y, size, size);
  17. }
  18. }
  19. private struct obstacle
  20. {
  21. public RectangleF model;
  22. public bool touched;
  23. public obstacle(float x, float y, float width)
  24. {
  25. touched = false;
  26. model = new RectangleF (x, y, width, obstacleThickness);
  27. }
  28. }
  29. private void checkCollision(player p, obstacle o)
  30. {
  31. if (p.model.IntersectsWith(o.model))
  32. {
  33. p.Vy = 0;
  34. o.touched = true;
  35. }
  36. }
  37. private void falling(player p)
  38. {
  39. p.Vy += gravity;
  40. p.model.Y += player1.Vy;
  41. }
  42. private void drawWorld(List<obstacle> os, player p)
  43. {
  44. Graphics g = CreateGraphics();
  45. g.FillEllipse(Brushes.OrangeRed, p.model);
  46. foreach (obstacle o in os)
  47. {
  48. g.FillRectangle(Brushes.Blue, o.model);
  49. }
  50. }
  51. private void addNewObstacle(float x, float y, float width)
  52. {
  53. obstacles.Add(new obstacle(x, y, width));
  54. }
  55. public Form1()
  56. {
  57. InitializeComponent();
  58. addNewObstacle(50, 100, 100);
  59. }
  60. private void drawTimer_Tick(object sender, EventArgs e)
  61. {
  62. falling(player1);
  63. foreach (obstacle o in obstacles)
  64. {
  65. checkCollision(player1, o);
  66. }
  67. drawWorld(obstacles, player1);
  68. }
  69. }
  70. }

Решение задачи: «Методы вызываются, но код внутри них не выполняется»

textual
Листинг программы
  1. checkCollision(ref player1, ref o);

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 4 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы