Могут ли Godot и GDScript хранить функции в переменных?

Все другие калибры, которые вы рекомендовали, имеют ошибки и не работают нормально на Kitkat и Lollipop. Кроме того, здесь нет Android Studio и удобной библиотеки.

Вот git repo для более поздней версии, обновленной для Lollipop, которую вы можете использовать с Gradle:

enter image description here [/g1]

После того, как вы включите библиотеку в свой проект, добавьте gaugelibrary в xml-макет вашей активности:


Это покажет статическую калибровку без иглы. Чтобы создать иглу со случайной анимацией, вам нужно сделать это в файле класса активности. Посмотрите, как это делается здесь:

package io.sule.testapplication;

import android.app.Activity;
import android.os.Bundle;
import android.os.CountDownTimer;
import android.view.Menu;
import android.view.MenuItem;

import java.util.Random;

import io.sule.gaugelibrary.GaugeView;

public class MainActivity extends Activity {
   private GaugeView mGaugeView;
   private final Random RAND = new Random();

   @Override
   protected void onCreate(Bundle savedInstanceState) {
     super.onCreate(savedInstanceState);
     setContentView(R.layout.activity_main);

      mGaugeView = (GaugeView) findViewById(R.id.gauge_view);
      mTimer.start();
   }


   private final CountDownTimer mTimer = new CountDownTimer(30000, 1000) {

      @Override
      public void onTick(final long millisUntilFinished) {
         mGaugeView.setTargetValue(RAND.nextInt(101));
      }

      @Override
      public void onFinish() {}
   };
}

Это создаст экземпляр иглы и сделает ее анимацией, перемещаясь к случайным значениям.

0
задан LuminousNutria 15 January 2019 в 17:46
поделиться

1 ответ

Функции GDScript не являются объектами, как в Python. Таким образом, вы не можете напрямую ссылаться на функцию.

Тем не менее, вы можете косвенно ссылаться на них по имени, используя их связанный экземпляр.

Например, со следующей функцией:

func hello():
    print('Hello')

Вы можете вызывать функцию для экземпляра по имени:

call('hello') # prints 'Hello'

Вы можете сохранить экземпляр и имя с помощью funcref(): [1112 ]

var ref = funcref(hello_object_instance, 'hello')
ref.call_func() # prints 'Hello'
takes_func_ref_to_call_later(ref) # later, prints 'Hello'

FuncRef.call_func() делает то же самое, что и object_instance.call(), просто оборачивает его в объект.

Из-за этого, как показали Object.connect() и друзья, общая функция для функций обратного вызова такова:

func deferred_finish(param1, param2, callback_obj, callback_func):
    # ... do something
    callback_ref = funcref(callback_obj, callback_func)
func _process(delta):
    if _finished:
        callback_ref.call_func()
func _enter_tree():
    deferred_finish('hello', 'world', self, 'finished_callback')

Надеюсь, это поможет. Дайте мне знать, если вам нужны какие-либо разъяснения.

0
ответ дан hola 15 January 2019 в 17:46
поделиться
Другие вопросы по тегам:

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