我的游戏有
class Enemy
Run Code Online (Sandbox Code Playgroud)
谁可以改变我的人工智能/功能
trait Moving
trait VerticalMover extends Moving
trait RandomMover extends Moving
Run Code Online (Sandbox Code Playgroud)
等等.现在我需要根据特征获取预加载的东西.我想要做的是有一个Map接受所有特征,这些特征扩展了Moving作为键,然后是一些EnemyContainer作为预先加载特征相关内容的值.
但是我如何定义这样的Map以及如何格式化我的.get()以通过某个Enemy的实例来获取容器.就像是:
val myEnemy = new Enemy with RandomMover
val myDetails:EnemyContainer = enemyDetailsStore.get(myEnemy.getClass)
Run Code Online (Sandbox Code Playgroud) 比方说,我有一流的A公共领域x和y.让我们说我有另一个pojo类,B但它使用setter和getter,所以它有setX()和setY().
我想使用一些自动方式从实例复制A到B后端.
至少使用默认设置,Dozer's
Mapper mapper = new DozerBeanMapper();
B b = mapper.map(a, B.class);
Run Code Online (Sandbox Code Playgroud)
不会正确复制字段.
那么是否有一个简单的配置更改,允许我使用Dozer或其他库来完成上述操作?
我想要一个单独的日志消息pojo LoggedExchange并应用一堆转换.转换是列表中的UnaryOperators:
List<ConditionalTransform> transforms = new ArrayList<>();
Run Code Online (Sandbox Code Playgroud)
其中,ConditionalTransform农具UnaryOperator<LoggedExchange>和我目前的解决方案是使用减少这样的:
public LoggedExchange transform(LoggedExchange original) {
return transforms.stream().reduce(original, (o, t) -> t.apply(o), (m1, m2) -> m2);
}
Run Code Online (Sandbox Code Playgroud)
并行运行这个没有意义,因为没有办法将两个消息组合在一起((m1,m2) -> m2只是为了让编译器满意).
有没有更好的方法来做到这一点(就像以某种方式组成所有ConditionalTranforms?),如果没有,该combiner函数是否会抛出异常或其他因为我不能支持并行执行?
该JavaDoc中指出,大多数这些操作有可能需要做map和reduce,但我看不出如何.
我正和Scala一起玩游戏.
我的游戏有几个游泳池来保持敌人.它们是不可变列表,因为它们被初始化为足够的大小(因为在游戏期间创建新的敌人实例非常昂贵).
我的游戏通过询问知道敌人是否还活着enemy.isVisible.所以我的CollisionHandler的工作方式如下:
让我感到沮丧的是,根据剖析器,步骤1占用了大部分时间.那一步的作用基本上是说:
def allActiveEnemies = List(enemyType1.getAllActive, enemyType2.getAllActive, ... ).flatten
Run Code Online (Sandbox Code Playgroud)
这flatten似乎并不昂贵,但它得到getAllActive调用.它们是在我的Pooled特性中实现的,如下所示:
trait Pooled[T <: Entity] {
var pool = List[T]()
val INITIAL_POOL_SIZE:Int
def initPool() {
for(i<-1 to INITIAL_POOL_SIZE)
{
addToPool(disable(createNew))
}
}
def getAllActive:List[T] = pool.filter(e => e.isVisible)
}
Run Code Online (Sandbox Code Playgroud)
(我省略了大部分特性,因为我觉得这不相关.)
pool.filter是在CollisionHandler花费的总时间的45%,这看起来很奇怪.
有什么建议让这里更快吗?
也许使用ArrayLists而不是List?也许使用一些排序和可变集合?或者我只是在做一些可怕的错误?
谢谢!
Java事件日志记录(分析)库有一个方法,它接受事件名称,然后是字符串的varargs列表,如下所示:
Analytics.event("my event name", "key1", "value1", "key2", "value2" ...)
Run Code Online (Sandbox Code Playgroud)
我已将我的事件参数收集到Map中
Map("key1" -> "value1", "key2" -> "value2" ...)
Run Code Online (Sandbox Code Playgroud)
现在必须有一种方法来展平Map键和值交替的列表,然后将其提供给事件方法.我已经进行了几次猜测,比如转换Map为列出List的Tuples,但是调用.flatten就可以了
No implicit view available from (java.lang.String, java.lang.String) => scala.collection.TraversableOnce[B]
Run Code Online (Sandbox Code Playgroud)
我在这里错过了什么?
我正在使用AndroidBillingLibrary为我的游戏实施应用内购买.
我做了以下事情:
现在有了测试帐户,我开始玩游戏并尝试进行应用内购买.我得到了市场屏幕,我可以看到项目的详细信息(因此市场确认项目ID,因为这些细节只在市场上,而不是在我的游戏中)但是我得到一个弹出窗口,上面写着"你试图的项目购买无法找到." 我回到了我的游戏中.
现在,此页面告诉我"另外,只有在项目发布时,测试帐户才能购买产品列表中的项目.该应用程序不需要发布,但该项目确实需要发布."
但市场控制台告诉我:
"在应用程序产品发布之前,应用内产品将显示为UNPUBLISHED,此时应用内商品的发布状态适用."
因此,在发布我的游戏之前,我无法将应用内商品更改为已发布(我还不想这样做).
如何在不发布游戏的情况下测试购买应用内商品?
我有两个班:AbstractMailingDirections和DirectionLoad.两者都有一个拷贝构造函数如下:
public AbstractMailingDirections(AbstractMailingDirections toCopy) {
this.message = toCopy.message;
this.defaultDirection = new DirectionLoad(toCopy.defaultDirection);
for (final DirectionLoad dls : toCopy.directionLoads) {
this.directionLoads.add(new DirectionLoad(dls));
}
}
Run Code Online (Sandbox Code Playgroud)
和
public DirectionLoad(DirectionLoad toCopy) {
this.direction = toCopy.direction;
this.transportationContract = toCopy.transportationContract;
this.pickUpTime = toCopy.pickUpTime;
this.acceptanceTime = toCopy.acceptanceTime;
this.acceptanceLocation = toCopy.acceptanceLocation;
this.information = toCopy.information;
}
Run Code Online (Sandbox Code Playgroud)
现在,当我调用MailingDirections复制构造函数(这只是super(toCopy))时,我有时不会得到defaultDirection复制的字段.或者不是全部.使用Eclipse调试器甚至更奇怪:
在这里,我点击了AbstractMailingDirections要复制的内容.看看印刷品中的defaultDirection.acceptanceTime17:00 如何,toString但显示null在字段列表中.如果我单击defaultDirection,它的toStringprint将显示该acceptanceTime字段为null.
这让我疯了.可能导致这种情况的任何想法?
使用 AWS-CDK。我必须将写入 SQS 的 Lambda 移至 VPC 内。我添加了接口网关,以允许通过以下方式从 VPC 直接连接到 SQS:
props.vpc.addInterfaceEndpoint('sqs-gateway', {
service: InterfaceVpcEndpointAwsService.SQS,
subnets: {
subnetType: SubnetType.PRIVATE,
},
})
Run Code Online (Sandbox Code Playgroud)
Lambda 部署到同一个 VPC(默认情况下部署到同一个私有子网),并且我将 QUEUE_URL 作为 env 参数传递,就像没有 VPC 时一样:
const ingestLambda = new lambda.Function(this, 'TTPIngestFunction', {
...
environment: {
QUEUE_URL: queue.queueUrl,
},
vpc: props.vpc,
})
Run Code Online (Sandbox Code Playgroud)
Lambda 代码简单地发送消息:
const sqs = new AWS.SQS({ region: process.env.AWS_REGION })
return sqs
.sendMessageBatch({
QueueUrl: process.env.QUEUE_URL as string,
Entries: entries,
})
.promise()
Run Code Online (Sandbox Code Playgroud)
如果没有 VPC,此发送可以工作,但现在 Lambda 只是在发送 SQS 消息时超时。我在这里缺少什么?
Android Market评级对应用开发者非常重要.我经常看到应用程序说"请考虑给我们评分",然后按下"Ok带我上市"/"不是现在"的按钮.
我想要做的是在我的应用程序中向用户显示评级栏(如http://kozyr.zydako.net/wp-content/uploads/2010/05/defaultRatingBar.png)并让用户在里面进行评级我的应用程序,而不是将他送到市场.
无论如何这样做?
我正在使用 sass bootstrap 3。我想让我的按钮使用与身体其他部位不同的字体。但是按钮从 body 继承了它们的字体。
.scss保持引导文件不变我目前有自己的main.scss覆盖颜色等,然后导入引导程序 scss。像这样:
$border-radius-small: 0px;
@import 'sass-bootstrap/lib/bootstrap';
Run Code Online (Sandbox Code Playgroud)
现在,目前我在导入之后有类似的东西:
.demibold {
font-family: 'The Message DemiBold';
}
Run Code Online (Sandbox Code Playgroud)
但后来我必须有这样的按钮:
<button id="loginButton" type="button" class="btn btn-primary btn-lg demibold">
Run Code Online (Sandbox Code Playgroud)
我可以向我添加一些东西来main.scss改变例如的定义,btn所以我不需要demibold为每个按钮添加样式。
java ×3
scala ×3
android ×2
amazon-sqs ×1
aws-cdk ×1
class ×1
constructor ×1
css ×1
dictionary ×1
dozer ×1
filter ×1
flatten ×1
google-play ×1
java-8 ×1
list ×1
map ×1
performance ×1
pojo ×1
rating ×1
reduce ×1
sass ×1
types ×1