我正在与Scala和Akka一起进行人工生命模拟,到目前为止,我对两者都非常满意.我有一些时间问题,但我无法解释.
目前,模拟中的每只动物都是一对演员(动物+大脑).通常,这两个演员轮流(动物将传感器输入发送到大脑,等待结果,作用于它并重新开始).然而,不时地,动物需要彼此互动以互相吃饭或繁殖.
对我来说奇怪的一件事是时机.事实证明,从一只动物向另一只动物发送信息比从动物发送到大脑要慢很多(大约100倍).这使得我的可怜的食肉动物和性活跃的动物处于劣势,而不是素食者和无性动物(免责声明:我自己也吃素,但我认为成为素食主义者的理由比在尝试捕食时陷入困境更好. ).
我提取了一个演示问题的最小代码片段:
package edu.blindworld.test
import java.util.concurrent.TimeUnit
import akka.actor.{ActorRef, ActorSystem, Props, Actor}
import akka.pattern.ask
import akka.util.Timeout
import scala.concurrent.Await
import scala.concurrent.duration.Duration
import scala.util.Random
class Animal extends Actor {
val brain = context.actorOf(Props(classOf[Brain]))
var animals: Option[List[ActorRef]] = None
var brainCount = 0
var brainRequestStartTime = 0L
var brainNanos = 0L
var peerCount = 0
var peerRequestStartTime = 0L
var peerNanos = 0L
override def receive = {
case Go(all) =>
animals = Some(all)
performLoop()
case BrainResponse =>
brainNanos += (System.nanoTime() …Run Code Online (Sandbox Code Playgroud) 为了改进应用程序中的滚动,我最近添加了对高分辨率滚轮事件的支持。根据文档,这非常简单:WM_MOUSEWHEEL 的处理程序应该支持任意值,而不是仅 +/- 120。
正确执行此操作的应用程序示例是 Windows 上的 Firefox 和 Chrome。
我使用的是带有高分辨率滚轮的 Logitech 鼠标 (MX Master 3),但我注意到我收到的所有事件都只是 +/- 120。但是,我可以找到两个非常奇怪的解决方法:
第二个技巧也适用于其他事情。例如,它使 Windows 10 设置应用程序滚动顺畅。以下是操作差异的演示(前 4 秒聚焦,然后 Firefox 聚焦则不聚焦):https://www.youtube.com/watch ?v=gb1FUtyLxUg&feature=youtu.be
我认为驱动程序这样做是为了与无法处理 120 以外的任何内容的旧应用程序兼容。但是有没有办法让我的应用程序选择加入以获得更好的事件?或者罗技驱动程序只是硬编码了一堆浏览器而其他人都运气不佳?