2015-03-09 3 views
0

Принимая от Mucaho's Scalatrix пример Я хотел был бы послать сообщения от View (ScalaFX) к игроку controller, как я могу абстрагировать/выставить актера, чтобы иметь возможность сделать это?ScalaFX и Akka (Посмотреть сообщение Actor)

object Ops extends App { 
 

 
    override def main(args: Array[String]): Unit = { 
 
    new JFXPanel(); // trick: create empty panel to initialize toolkit 
 
    new Thread(new Runnable() { 
 
     override def run(): Unit = { 
 
     View.main(Array[String]()) 
 
     } 
 
    }).start() 
 

 
    val system = ActorSystem("Ops") 
 
    val controller = system.actorOf(Props[Controller], "controller") 
 
    } 
 
}

+0

Я не понимаю, о чем вы здесь спрашиваете. Из 'ActorSystem' вы всегда можете получить ссылку на любого действующего лица, используя метод [' actorSelection (путь: String) '] (http://doc.akka.io/api/akka/2.3.9/? _ga = 1.251897226.2043915.1425983990 # akka.actor.ActorSystem) и передавая путь имени, который вы дали актеру (т.е. '' controller '') –

+0

. Для записи, какую версию akka/scala вы используете? –

+0

@ pagoda_5b я мог бы создать экземпляр ActorSystem изнутри Вид следующим образом: Объект 'Посмотреть расширяет JFXApp { VAL системы = ActorSystem ("Опс") вал контроллер = system.actorOf (Подпорки [Контроллер], "контроллер") этап = новый PrimaryStage { название = "Упс" ширина = 800 высота = MinWidth = 800 MinHeight = 600 сцена = {...}} } ' , но не уверен, как Я мог бы получить доступ к нему из представления, если ActorSy стебель был определен как в моем исходном посте? –

ответ

0

Единственное, что приходит на ум в данный момент, чтобы обернуть систему и актеров, как общедоступные члены другого объекта

object Ops extends App { 
 

 
    override def main(args: Array[String]): Unit = { 
 
    new JFXPanel(); // trick: create empty panel to initialize toolkit 
 
    new Thread(new Runnable() { 
 
     override def run(): Unit = { 
 
     View.main(Array[String]()) 
 
     } 
 
    }).start() 
 

 
    object Actors { 
 
     val system = ActorSystem("Ops") 
 
     val controller = system.actorOf(Props[Controller], "controller") 
 
    } 
 
    } 
 
}

теперь вы можете отправлять сообщения в любой части вашего кода, , например.

object View extends JFXApp { 
    stage = ... 

    Ops.Actors.controller ! Tick 
} 
Смежные вопросы