给定一组带有x,y坐标的几百万个点,快速找到一个位置的前1000个最近点的算法是什么?"快速"在这里意味着家用电脑上大约100毫秒.
蛮力意味着进行数百万次乘法,然后对它们进行排序.虽然一个简单的Python应用程序可以在不到一分钟的时间内完成,但对于交互式应用程序来说仍然太长.
点的边界框将是已知的,因此将空间划分为简单网格是可能的.然而,点的分布有些不均匀,所以我怀疑大多数网格方块都是空的,然后突然其中一些将包含大部分点.
编辑:不必确切,实际上可能非常不准确.如果前1000名实际上只是来自前2000名的一些随机点,那就没什么大不了的了.
编辑:点集很少改变.
我有一些使用套接字制作多人回合制游戏的经验,但我从未尝试过实时动作游戏.我需要处理哪些额外的问题?我是否需要保留玩家行为的历史,以防滞后的玩家在过去做些什么?我真的需要使用UDP数据包还是TCP足够?还有什么?
我还没有真正决定要做什么,但出于这个问题的目的,你可以考虑一个带有XY运动的10人2D游戏.
在Google App Engine上使用Python查询数据存储,可以使用GQL或Entity.all()然后对其进行过滤.所以例如这些是等价的
gql = "SELECT * FROM User WHERE age >= 18"
db.GqlQuery(gql)
Run Code Online (Sandbox Code Playgroud)
和
query = User.all()
query.filter("age >=", 18)
Run Code Online (Sandbox Code Playgroud)
现在,也可以按键名查询事物.我知道在GQL中你这样做
gql = "SELECT * FROM User WHERE __key__ >= Key('User', 'abc')"
db.GqlQuery(gql)
Run Code Online (Sandbox Code Playgroud)
但是你现在如何使用过滤器来做同样的事情呢?
query = User.all()
query.filter("__key__ >=", ?????)
Run Code Online (Sandbox Code Playgroud) 我正在制作游戏,并希望有一个游戏音乐的背景循环,并且它有两个不同的声音效果通道.我想控制这些频道的音量.我看了fmod,但这超出了我的预算.现在,我正在查看Apple提供的MixerHostAudio示例.这是一个明显的例子,但有点啰嗦是1000多行只是为了播放两个声音,所以我想知道我是否应该做其他事情.
我理想的API看起来像这样:
SoundSystem *sounds = [SoundSystem soundSystemWithLoop:@"koto.mp3"];
[sounds play:@"chimes.mp3" channel:1 looping:YES volume:0.0];
[sounds fadeTo:1.0 channel:1 delay:0.5];
[sounds play:@"buddha_bell.mp3" channel:2];
Run Code Online (Sandbox Code Playgroud) 我在GAE上的Python编程中重现的模式是从数据存储中获取一些实体,然后可能根据各种条件更改该实体.最后,我需要将.put()实体返回到数据存储,以确保可以保存对其进行的任何更改.
然而,实际上通常没有进行任何更改,最终的.put()只是浪费金钱.如果真的发生变化,如何轻松确定我只放了一个实体?
代码可能看起来像
def handle_get_request():
entity = Entity.get_by_key_name("foobar")
if phase_of_moon() == "full":
entity.werewolf = True
if random.choice([True, False]):
entity.lucky = True
if some_complicated_condition:
entity.answer = 42
entity.put()
Run Code Online (Sandbox Code Playgroud)
如果任何条件改变了实体,我可以保持一个"已更改"的标志,但这似乎非常脆弱.如果我忘记将它设置在某个地方,那么更改将会丢失.
我最终使用了什么
def handle_get_request():
entity = Entity.get_by_key_name("foobar")
original_xml = entity.to_xml()
if phase_of_moon() == "full":
entity.werewolf = True
if random.choice([True, False]):
entity.lucky = True
if some_complicated_condition:
entity.answer = 42
if entity.to_xml() != original_xml: entity.put()
Run Code Online (Sandbox Code Playgroud)
我不会称之为"优雅".优雅的是,如果对象最终自动保存自己,但我觉得这很简单,可读性足以做到现在.
注意:最后的解决方案
如果我尝试执行超过1024个字符的HTTP POST,则会失败.为什么?这是一个最小的例子:
recipient.php:
<?php
if (strlen(file_get_contents('php://input')) > 1000
|| strlen($HTTP_RAW_POST_DATA) > 1000) {
echo "This was a triumph.";
}
?>
Run Code Online (Sandbox Code Playgroud)
sender.php:
<?php
function try_to_post($char_count) {
$url = 'http://gpx3quaa.joyent.us/test/recipient.php';
$post_data = str_repeat('x', $char_count);
$c = curl_init();
curl_setopt_array($c,
array( CURLOPT_URL => $url,
CURLOPT_HEADER => false,
CURLOPT_CONNECTTIMEOUT => 999,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => 1,
CURLOPT_POSTFIELDS => $post_data
)
);
$result = curl_exec($c);
echo "{$result}\n";
curl_close($c);
}
for ($i=1020;$i<1030;$i++) {
echo "Trying {$i} - ";
try_to_post($i);
}
?>
Run Code Online (Sandbox Code Playgroud)
输出:
Trying 1020 - …Run Code Online (Sandbox Code Playgroud) 这与此处众多其他类似问题的情况不同.
*由于未捕获的异常'NSInternalInconsistencyException'而终止应用程序,原因:' - [UIViewController _loadViewFromNibNamed:bundle:]加载了GameView笔尖,但未设置视图插座.
您可能会想"按照它说的那样,将文件所有者连接到IB中的视图!".但问题是,我甚至在项目中甚至在项目目录中都没有GameView.xib.
我的项目中有一个"GameViewController.m"和匹配的"GameViewController.xib".使用GameViewController会出现这个错误,但我不明白尝试加载"GameView.xib"的想法.它不应该使用"GameViewController.xib"吗?
如果我grep我的项目目录,我确实看到它引自"UserInterfaceState.xcuserstate".
<string>file://localhost/Users/bemmu/Dropbox/b2/iphone/ValleyStory/ValleyStory/GameView.xib</string>
Run Code Online (Sandbox Code Playgroud)
这个提到的文件不存在.我之前可能有一个带有该名称的文件,并重命名/删除它,但它没有被我在IB中看到的任何地方引用.
我设法混淆了xcode吗?

上面是从右下方向左上方沿着地面行走的角色的四个图像.您可以在第三个面板中看到绘图顺序不正确.
这里似乎没有"正确的顺序".例如,如果不是一个小家伙,我们有一只偷猫的精灵穿过门,那么无论你是先把门还是先把猫拉出来,都是错的.

其他游戏引擎如何处理这个?一些黑客可以防止这种情况发生?手工绘制z缓冲区?还有其他选择没有发生在我身上吗?
假设你取字符串'a'和'z'并按字母顺序列出它们之间的所有字符串:['a','b','c'...'x','y','z "].从这个列表的中点开始,你会发现'm'.所以这有点像取两个字符串的平均值.
您可以将其扩展为具有多个字符的字符串,例如,'aa'和'zz'之间的中点可以在列表中间找到['aa','ab','ac'...'zx ','zy','zz'].
可能在某处有一个Python方法可以做到这一点吗?如果没有,即使知道算法的名称也会有所帮助.
我开始制作我自己的例程,简单地通过两个字符串并找到第一个不同字母的中点,这似乎在'aa'和'az'中点是'am'时工作得很好,但是然后它在'cat'上失败了,它认为是'c'的'小狗'中点.我尝试使用谷歌搜索"二进制搜索字符串中点"等但不知道我在这里尝试做什么的名称我没有运气.
我添加了自己的解决方案作为答案