我有一个需要显示蒙特卡罗SIM卡结果的Rails应用程序,而且Ruby第一次不够快,无法满足我的需求.所以,我开始四处寻找是否可以在C中重写我的模拟并在Ruby中使用这些结果,并且一些谷歌搜索出现了RubyInline gem,可以直接在Ruby中编写更快的C代码.做一些简单的东西很有用,例如,用Ruby和C编写的一些基本函数:
class FasterFunctions
inline do |builder|
builder.c '
double rand_sum(int trials)
{
double sum = 0.0;
for (int i = 0; i<trials; i++)
{
sum += (double)rand()/(double)RAND_MAX;
}
return sum;
}'
builder.c '
long loop_sum(long trials)
{
long sum = 0;
for (long i = 0; i<trials; i++)
{
sum+=i;
}
return sum;
}'
end
end
#the C version is 4 orders of magnitude faster
trials = 1_000_000
ruby_sum = 0
trials.times {|i| ruby_sum += i}
c_sum = FasterRand.new.loop_sum(trials) …Run Code Online (Sandbox Code Playgroud) 我刚开始玩SpriteKit,这个问题几乎立刻就出现了.如果我有一个视图控制器,其视图是SKView,在其上推动另一个视图控制器(例如,暂停菜单或结束游戏菜单),然后使用SKView展开回视图控制器需要相当长的时间,根据我对4S和5的经验,约一秒半.
您可以使用默认的Hello World模板对此进行测试.我将其设置为导航视图的根控制器,并在导航栏中粘贴一个按钮以触发推送到新视图控制器的segue.第二个视图控制器包含一个触发展开segue的按钮.当按下按钮时,它会保持突出显示大约一秒半,然后最终发生segue,这对用户来说是非常刺耳的.
我已经浏览了SpriteKit文档并且没有注意到有关正确使用segue的任何内容,这只是一个错误,还是在SKView上推送新视图被认为是不好的做法?相反,我应该使用SKNodes/SKScenes来呈现我的暂停和结束游戏菜单,从而始终将SKView保留在屏幕上吗?
我不确定这是一个错误还是我做错了什么,但是当我尝试运行持续时间为 0.0 的自定义操作时,该块会运行两次。例如,如果我将此代码放入场景的 init 方法中,我会得到以下输出:
SKAction *doThis = [SKAction customActionWithDuration:0.0 actionBlock:^(SKNode *node, CGFloat elapsedTime) {
NSLog(@"DO THIS");
}];
[self runAction:doThis];
2014-03-13 01:41:11.271 Leapfrog[2168:60b] DO THIS
2014-03-13 01:41:11.287 Leapfrog[2168:60b] DO THIS
Run Code Online (Sandbox Code Playgroud)
如果我尝试按顺序运行两个操作,第一次执行两次,第二次执行一次,如下所示:
SKAction *doThis = [SKAction customActionWithDuration:0.0 actionBlock:^(SKNode *node, CGFloat elapsedTime) {
NSLog(@"DO THIS");
}];
SKAction *doThat = [SKAction customActionWithDuration:0.0 actionBlock:^(SKNode *node, CGFloat elapsedTime) {
NSLog(@"DO THAT");
}];
NSArray *actions = [NSArray arrayWithObjects:doThis, doThat, nil];
SKAction *sequence = [SKAction sequence:actions];
[self runAction:sequence];
2014-03-13 01:46:11.910 Leapfrog[2184:60b] DO THIS
2014-03-13 01:46:11.926 Leapfrog[2184:60b] DO …Run Code Online (Sandbox Code Playgroud) 我使用网络应用来工作,而我经常使用的快捷方式之一是Ctrl+ M。但是,我经常输入错误非常快,并且错误地按了hit Ctrl+ N,并且我没有在我的Web应用程序中触发操作,而是打开了一个新窗口。我希望能够防止这种情况,但似乎无法弄清楚。到目前为止,我已经尝试过在每次页面加载时都运行此代码,但是似乎没有任何作用。(忽略了我仅使用一个键的开关的事实,我还有其他一些自定义Ctrl快捷键,这些快捷键不会覆盖正在运行的Chrome快捷键,为便于阅读,我删除了它们)
document.onkeydown = function(e)
{
if(e.ctrlKey === false)
{
return;
}
switch(e.which) {
case 78:
//just to keep from opening a new tab when merging cells
e.preventDefault();
e.stopPropagation();
break;
default:
return;
}
};
Run Code Online (Sandbox Code Playgroud)