我正在尝试使用pygame和IDLE在python中开发一个简单的游戏。从昨天开始,我一直浏览各种资源以了解该语言(以及一般而言的编程),即使如此,我也遇到了一些问题和对它全部工作原理的误解。因此,如果有人可以建议我如何进行(或为我提供一些好的学习材料),那么我将不胜感激。
到目前为止,我只有少量代码构成了我的游戏构想的基础,因此我将在此处发布并列出一些问题。
import pygame
def main():
pygame.init()
logo = pygame.image.load("coolblack.jpg")
pygame.display.set_icon(logo)
pygame.display.set_caption("Battleship")
screenWidth = 800
screenHeight = 600
screen = pygame.display.set_mode((screenWidth, screenHeight))
bgd_image = pygame.image.load("grid.png")
#--------------------------------------------------------------------
#the image named 'image' should be above 'bgd_image' but below 'cv9'
#in fact, everything should be above bgd_image, especially 'cv9'
#--------------------------------------------------------------------
image = pygame.image.load("coolblack.jpg")
cv9 = pygame.image.load("ussessexcv9.gif").convert_alpha()
xposCv9 = 400
yposCv9 = 510
step_xCv9 = 1
step_yCv9 = 1
screen.blit(bgd_image, (0,0))
screen.blit(image, (400,300))
screen.blit(cv9, (xposCv9, yposCv9))
pygame.display.flip()
clock = pygame.time.Clock()
running = True
#---------------------------------------------
#I've got a pretty good idea (sort of) about
#what is happening in the section
#below this point, however it seems that
#the image 'cv9' creates a trail of itself
#every time it moves, so how could I make it
#so that it doesn't do so?
#---------------------------------------------
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
if event.type == pygame.KEYDOWN and event.key == pygame.K_ESCAPE:
running = False
if xposCv9>screenWidth-64 or xposCv9<0:
step_xCv9 = -step_xCv9
if yposCv9>screenHeight-64 or yposCv9<0:
step_yCv9 = -step_yCv9
xposCv9 += step_xCv9
yposCv9 += step_yCv9
screen.blit(cv9, (xposCv9, yposCv9))
pygame.display.flip()
clock.tick(60)
if __name__=="__main__":
main()
pygame的工作方式是,它内部具有您要更新的屏幕的表示形式。因此,它完全从黑色开始,然后执行第一个“ blit”操作。这将更新内部表示。然后,当您调用“
pygame.display.flip”时,它将在屏幕上显示该表示。但是,这不会为您的下一帧自动“清除”您的表示形式,使其变回全黑。因此,在下一帧上,您再次进行blit(例如,稍微向左),并且仍然保留了第一blit,从而创建了“
trail”。
因此,对于您正在做的事情,最好的办法是在循环中清除屏幕的内部表示,然后再开始绘制下一帧。您可以通过用单色填充它来“清除”屏幕,就像这样…
BLACK = (0,0,0)
....
screen.blit(cv9, (xposCv9, yposCv9))
pygame.display.flip()
clock.tick(60)
screen.fill(BLACK) # Add this to "clear" the screen.
请注意,如果您选择走这条路线,这意味着您将需要在每帧中重绘所有元素(而不仅仅是自上一帧以来发生变化的元素)。
顺便说一句,如果您想知道,为什么在最后没有自动清除框架是有充分的理由的。在某些情况下,仅更新屏幕中要更新的部分可能会更快。这可能会导致某些应用程序中的性能加速。但是,最好从清除屏幕开始,如上面的示例所示。
Python 是当下最为火热,且功能最为全面的一门编程语言。Python 之所以深受大家喜爱, 除了可以被应用到“人工智能”领域之外,还可以延伸到数据分析、Web 开发、自动化测试、自然语言处理、游戏开发等各个领域。这一切的实现得益于 Python 有一个强大的第三方库(网址: https://pypi.org/),这个第三方库相当于一个手机软件市场,允许我们随意下载各式各样的软件包,并且开箱即用
页面追踪分为两部分: 时间筛选 和 页面追踪列表详情 1.时间筛选 便捷按钮有今日、昨日、前日、上周 X、近七天,并且能自定义选择时间段 2.页面追踪列表 1)通过页面本身的热区来监测页面内容的热度,点击越多的内容越亮,反之则越暗 2)可以非常快速地观察到网页中的点击分布情况 注意:该功能正在优化中,暂时不对外开放。
Akka使用 GitHub Issues作为其问题跟踪系统。 浏览 Tickets 在提交一张ticket之前,请检查现有的Akka tickets是否在早些时候报告了同样的问题。非常欢迎你在现有的ticket中发表评论,尤其是当你有可以分享的重复性测试用例的时候。 路线图 请参看Akka路线图,以找出即将发行的Akka版本中的总体主题。 创建ticket 请包括 Scala 和Akka的版本及相
在Git中‘追踪分支’是用与联系本地分支和远程分支的. 如果你在’追踪分支'(Tracking Branches)上执行推送(push)或拉取(pull)时, 它会自动推送(push)或拉取(pull)到关联的远程分支上. 如果你经常要从远程仓库里拉取(pull)分支到本地,并且不想很麻烦的使用"git pull "这种格式; 那么就应当使用‘追踪分支'(Tracking Branches). ‘
你好,我目前正在开发一款生存射击游戏,我目前对一些事情感到沮丧。一个是我的游戏动画不起作用。我这里有播放器类的代码: 如果您想了解我的任何其他问题/挫折,请说出来。任何帮助将不胜感激。谢谢。
问题内容: 所以我运行代码,它就开始不正常了。我不熟悉pygame。 代码如下: 这张图片并不是我不能发布视频的那个,但它确实是我的代码的作用 问题答案: 问题是由多次调用 . 在应用程序循环结束时更新显示就足够了。 多次调用or原因 忽隐忽现。 删除对的所有呼叫从你的代码,但调用一次 在应用程序循环结束时: 如果在之后更新显示,将显示在短时间内填充了背景色。然后玩家被抽中 ()显示时,播放器位于
关键字 defer 允许我们推迟到函数返回之前(或任意位置执行 return 语句之后)一刻才执行某个语句或函数(为什么要在返回之后才执行这些语句?因为 return 语句同样可以包含一些操作,而不是单纯地返回某个值)。 关键字 defer 的用法类似于面向对象编程语言 Java 和 C# 的 finally 语句块,它一般用于释放某些已分配的资源。 示例 6.8 defer.go: packag
在微服务场景下,我们会拆分出来很多的服务,也就意味着一个业务请求,少则跨越 3-4 个服务,多则几十个甚至更多,在这种架构下我们需要对某一个问题进行 Debug 的时候是极其困难的一件事情,那么我们就需要一个调用链追踪系统来帮助我们动态地展示服务调用的链路,以便我们可以快速地对问题点进行定位,亦可根据链路信息对服务进行调优。 在 Hyperf 里我们提供了 hyperf/tracer 组件来对各个