C # игра тикает с делегатами - PullRequest
0 голосов
/ 14 октября 2018

Я работаю над игрой, которая работает, когда отметка 'x'.У меня есть делегат TickEvent, это метод, который запускается, когда он должен.

public delegate void TickEvent(object[] objects);

У меня есть планировщик, который запускает метод с определенной отметкой.

public static void scheduleTick(long tick, TickEvent tickEvent)
    {
        queue.put(tick, tickEvent);
    }

И обработчик.

public static void handleScheduledTicks()
        {
            for(int i = 0; i < queue.variables.Count; i++)
            {
                if((long)queue.variables[i] < elapsedTicks)
                {
                    var tickEvent = (TickEvent)queue.values[i];
                    // runs the tickEvent with its arguments

                    queue.remove(i);
                }
            }
        }

Создание события:

public static void someEvent(object[] objects)
{
    Console.WriteLine(objects[0].ToString());
}

Calling the eventHandler and scheduling the event:

    static long ticks = 0;

    public static void Main()
    {
        scheduleTick(100, someEvent(new object[]() {"some args"})

        while(true)
        {
            handleScheduledTicks();
            ticks++;
        }
    }

Итак, мой вопрос: как я могу запустить tickEvent с его аргументами?(handleScheduledTicks закомментированная строка)

Ответы [ 2 ]

0 голосов
/ 14 октября 2018

Я думаю, что нашел решение:

tickEvent(tickEvent.Method.GetParameters());
0 голосов
/ 14 октября 2018

Я чувствую что-то не так с самой нижней строкой:

public static void Main()
    {
        scheduleTick(100, someEvent(new object[]() {"some args"})
        /* this will not complile. you are passing `void` to method `handleScheduledTicks` as an argument to type of TickEvent. It should be like :
           scheduleTick(100, someEvent) */

        while(true)
        {
            handleScheduledTicks();
            ticks++;
        }
    }

И handleScheduledTicks часть должна быть:

if((long)queue.variables[i] < elapsedTicks)
                {
                    var tickEvent = (TickEvent)queue.values[i];
                    /* tickEvent(new object[]() {"some args"}); */
                    queue.remove(i);
                }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...