Я хочу приостановить свою игровую сцену, когда приложение перемещается в фоновом режиме (кнопка «Домой», вызов и т. Д.) Как приостановить GameScene из файла AppDelegate?

Я написал функцию дампа, которая в основном печатает публичные элементы объекта, если она не переопределила toString (). Его можно было легко расширить, чтобы вызвать геттеры. Javadoc:

Сбрасывает данный объект в System.out, используя следующие правила:

  • Если объект Iterable, все его компоненты сбрасываются.
  • Если Объект или один из его суперклассов переопределяет toString (), «toString» сбрасывается
  • . Else метод вызывается рекурсивно для всех открытых элементов Object
  • /**
     * Dumps an given Object to System.out, using the following rules:<br>
     * <ul>
     * <li> If the Object is {@link Iterable}, all of its components are dumped.</li>
     * <li> If the Object or one of its superclasses overrides {@link #toString()}, the "toString" is dumped</li>
     * <li> Else the method is called recursively for all public members of the Object </li>
     * </ul>
     * @param input
     * @throws Exception
     */
    public static void dump(Object input) throws Exception{
        dump(input, 0);
    }
    
    private static void dump(Object input, int depth) throws Exception{
        if(input==null){
            System.out.print("null\n"+indent(depth));
            return;
        }
    
        Class<? extends Object> clazz = input.getClass();
        System.out.print(clazz.getSimpleName()+" ");
        if(input instanceof Iterable<?>){
            for(Object o: ((Iterable<?>)input)){
                System.out.print("\n"+indent(depth+1));
                dump(o, depth+1);
            }
        }else if(clazz.getMethod("toString").getDeclaringClass().equals(Object.class)){
            Field[] fields = clazz.getFields();
            if(fields.length == 0){
                System.out.print(input+"\n"+indent(depth));
            }
            System.out.print("\n"+indent(depth+1));
            for(Field field: fields){
                Object o = field.get(input);
                String s = "|- "+field.getName()+": ";
                System.out.print(s);
                dump(o, depth+1);
            }
        }else{
    
            System.out.print(input+"\n"+indent(depth));
        }
    }
    
    private static String indent(int depth) {
        StringBuilder sb = new StringBuilder();
        for(int i=0; i<depth; i++)
            sb.append("  ");
        return sb.toString();
    }
    
    -3
    задан Niklas Ro 17 March 2019 в 22:36
    поделиться

    1 ответ

    Получите доступ к viewController, где находится ваша сцена, т.е. если ваша gameScene находится в viewController с именем gameViewController:

      let vc = gameViewController()
       vc.view.isPaused = true
    

    или

       vc.GameScene.view.isPaused = true
    
    0
    ответ дан Peter Ruppert 17 March 2019 в 22:36
    поделиться
    Другие вопросы по тегам:

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