каков C++ / синтаксис CLI для подписки для событий?

Из того, что я понимаю, у вас есть сетка 48x32, пространство которой составляет квадраты 16px. Алгоритм, который вы используете для генерации позиции вашей еды в сетке:

let food = {
     x : Math.floor(Math.random()*((cvsW/unit)-1)+1)*unit, // Chooses 1-47
     y : Math.floor(Math.random()*((cvsH/unit)-1)+1)*unit // Chooses 1-31
}

выбирает значение от 1 до 47 для x и от 1 до 31 для y. Проблема в том, что позиция 47 для x и позиция 31 для y находятся на краю сетки (это потому, что первая позиция x / y равна 0, а не 1). Чтобы исключить эти пробелы в качестве вариантов выбора, алгоритму просто необходимо вычесть 2 вместо 1 из числа пробелов в сетке (которое cvsW или cvsH, деленное на единицу):

let food = {
     x : Math.floor(Math.random()*((cvsW/unit)-2)+1)*unit, // Chooses 1-46
     y : Math.floor(Math.random()*((cvsH/unit)-2)+1)*unit // Chooses 1-30
}

В основном, вычитая только 1 убрал последний столбец / строку в качестве выбора для позиции x / y, а затем добавив 1, сдвинул все вправо. Вот так (для х):

enter image description here

Новый алгоритм делает это, первоначально исключая два последних варианта, затем смещаясь на 1: [1110 ]

enter image description here

6
задан Deduplicator 16 September 2014 в 01:46
поделиться

1 ответ

Синтаксис подобен C#, другими словами, += перегружается для создания этого возможным:

instanceOfEventSource.MyEvent +=
    gcnew EventSource::MyEventHandlerDelegate(this, &MyClass::MyEventHandlerMethod);

Аналогично для удаления. В отличие от C#, однако, Вы не можете опустить явное инстанцирование делегата обработчиков событий, таким образом, это производит довольно многоречивый код.

7
ответ дан 16 December 2019 в 21:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: