我正在开发一个小卡片交换世界旅行游戏,我想象它是宝石迷阵和10天地理棋盘游戏之间的交叉.到目前为止,编码一直没问题,但帧速率非常糟糕......目前我的Core 2 Duo上的低20分.这是一个问题,因为我正在为英特尔3月的开发者竞赛创建游戏,该竞赛正好针对上网本包装动力不足的Atom处理器.
这是游戏的屏幕:
alt text http://www.necessarygames.com/my_games/betraveled/betraveled-fps.png
我是Python和Pygame的新手(这是我第一次使用它们),而且很遗憾缺乏正式的CS训练......也就是说我认为可能会有很多不良做法在我的代码中,以及可以优化的A LOT.如果你们中的一些老Python手不介意看看我的代码,看看你是否找不到任何明显的优化领域,我将非常感激.
你可以在这里下载完整的源代码(Python 2.6 + Pygame 1.9):http: //www.necessarygames.com/my_games/betraveled/betraveled_src0328.zip
编译的exe在这里:www.necessarygames.com/my_games/betraveled/betraveled_src0328.zip
我关注的一件事是我的事件管理器,我觉得它可能有一些性能整体,而另一件事是我的渲染......我几乎只是将所有内容一直显示在屏幕上(参见渲染例程)在我的game_components.py下面); 我最近发现你应该只更新屏幕上已经发生变化的区域,但我仍然对如何完成这一点仍然模糊......这可能是一个巨大的性能问题吗?
任何想法都非常感谢!像往常一样,我很高兴通过PayPal为您提供时间和精力.
Jordan
EDIT:
感谢下面的建议,我在代码上运行了cprofile.如果有人愿意看看这个输出并让我知道什么是不可预期的,那将是很好的.
这是p.strip_dirs()的输出.sort_stats('cumulative').print_stats():
pydev debugger: starting
Sun Mar 28 04:46:16 2010 cprofile
8383715 function calls (8264821 primitive calls) in 157.732 CPU seconds
Ordered by: cumulative time
ncalls tottime percall cumtime percall filename:lineno(function)
1 0.000 0.000 157.732 157.732 <string>:1(<module>)
1 0.000 0.000 157.732 157.732 main.py:47(main)
1 0.074 …Run Code Online (Sandbox Code Playgroud) 我运行一个网站 ( www.pixelscrapper.com ),提供图像文件下载和图像压缩集合(这些文件是包含多个图像、psd、矢量等的 zip 文件)。这些文件托管在 Amazon S3 上,并通过下载由 aws sdk 为 php (v1) 生成的 url。
就在最近,尝试使用 Firefox 下载我们的 zip 文件的用户开始收到“此文件不常下载”警告(下载完成后),这迫使他们在通过 Firefox 下载管理器访问文件之前覆盖警告。自然,这种警告会引起我们用户的关注。
此警告仅在Firefox 中显示——Chrome、Edge 和 Internet Explorer 在下载和打开我们的 zip 文件时不显示警告。该警告似乎也只出现在最近添加到站点的(惊奇、惊奇)文件中,并且总下载量相对较少——但我们的许多文件从未收到大量下载,因此此警告具有有可能无限期地困扰我们的许多文件。
我的问题是:我能做些什么来防止这个警告?通过调整标题,以某种方式签署文件等?(据我所知,Chrome 和 Edge 也有“不常见的文件”警告,但他们似乎并不关心我们的文件——为什么这个警告只在 Firefox 中触发?)我在 Stack Overflow 上搜索过,在其他地方,但我看到的大多数关于“不常见下载”警告的问题都是针对 Chrome 或 Internet Explorer 的,我似乎找不到关于此警告的任何特定于 Firefox 的信息。
这是导致警告的示例文件下载 url(由 aws sdk 生成):
https://pixelscrapper-user-content.s3.amazonaws.com/template-attachment/user-2/node-13574/paper-037-template-polka-dots.zip?response-content-disposition=attachment%3B%20filename%3D%22ps_marisa-lerin_13574_paper-037-template-polka-dots_cu.zip%22&AWSAccessKeyId=AKIAIWM7MZMHRPA6FHEA&Expires=1495386939&Signature=HDmwRFPX81CIVrQgu1BkEyR9iRQ%3D
Run Code Online (Sandbox Code Playgroud)
这是对 Firefox 中标头的检查:
更新:
这里的问题不是由 aws sdk 生成的令人讨厌的 url:我检查了从以下“干净”url 下载相同的 zip 文件(包含一个 jpg,一个 psd),它仍然给出警告:http:// pixelcrapper-misc-files.s3.amazonaws.com/ps_marisa-lerin_13574_paper-037-template-polka-dots_cu.zip
使用PHP我想检查字符串是否只包含字母字符(我不想允许任何数字或特殊字符,如!@#$%^&*).ctype_alpha()对于这个目的来说似乎很棒.
问题是我想要允许重音字母,例如法语等等.例如,我想允许"Lórien".
我知道ctype_alpha()可以使用set_locale(),但对于这个用例似乎仍然有限,因为我想允许所有基于拉丁语言的字符.
任何想法如何最好地实现这一目标?
注意:解决方案发布在如何检测非西方字符?非常适合显式检测非拉丁字符,但它允许特殊字符和空格,我不想允许:
preg_match('/[^\\p{Common}\\p{Latin}]/u', $string)
我想要一些像这样工作的东西,但是将允许的字符限制为字母字符(所以没有特殊的字符,比如!@#$%^&).
我有一个Drupal站点,它有一个跟踪用户的表.我想要做的是随着时间的推移图表成员增长.所以我想按摩mysql返回这样的东西:
date | # of users (total who have registered up to the given date)
1/1/2014 | 0
1/2/2014 | 2
1/3/2014 | 10
Run Code Online (Sandbox Code Playgroud)
"用户数"是指在指定日期之前已注册帐户的用户总数(running-total) - 而不是在该特定日期注册的用户数(这是很容易检索的).
我的{users}表的每一行都有一uid列,一name列和一个created(时间戳)列.
因此,我的{users}表中的示例记录将是:
name: John Smith
uid: 526
created: 1365844220
Run Code Online (Sandbox Code Playgroud) 我已经在这几天工作但现在没有成功.基本上,我有一堆以2D矩阵排列的节点.每个节点有四个邻居,除了矩阵的边和角上的节点,它们分别有3个和2个邻居.想象一下,在一个矩形区域中并排放置了一堆方形卡片 - 该项目实际上模拟了一种卡片/棋盘游戏.
每个节点可以连接或不连接到它周围的节点.每个节点都有一个函数(get_connections()),它返回它所连接的节点周围的节点(因此返回0到4个节点的任何地方).每个节点还有一个"索引"属性,它包含它在板矩阵上的位置(例如'1,4' - >第1行,第4列).我想要做的是在给定特定"开始"节点的情况下找到连接节点的最长非重复路径.
我上传了几张图片,可以很好地了解我要做的事情:
在两张图像中,突出显示的红色卡片被认为是包含最左上方卡片的连接卡片的最长路径.但是,您可以在两张图片中看到应该在路径中留下的几张卡片(第一张图片中是罗马尼亚和马尔代夫,第二张图片中是希腊和土耳其)
这是我目前用于查找最长路径的递归函数,给定起始节点/卡:
def get_longest_trip(self, board, processed_connections = list(),
processed_countries = list()):
#Append this country to the processed countries list,
#so we don't re-double over it
processed_countries.append(self)
possible_trips = dict()
if self.get_connections(board):
for i, card in enumerate(self.get_connections(board)):
if card not in processed_countries:
processed_connections.append((self, card))
possible_trips[i] = card.get_longest_trip(board,
processed_connections,
processed_countries)
if possible_trips:
longest_trip = []
for i, trip in possible_trips.iteritems():
trip_length = len(trip)
if trip_length > len(longest_trip):
longest_trip = trip
longest_trip.append(self) …Run Code Online (Sandbox Code Playgroud) pygame ×2
python ×2
amazon-s3 ×1
count ×1
firefox ×1
frame-rate ×1
http-headers ×1
locale ×1
mysql ×1
performance ×1
php ×1
regex ×1
zip ×1