如何解决我正在尝试在pygame中编写一个程序,该程序如何使用一组可变的点绘制星星
1。问题:
我想学习如何使用多个坐标作为变量并使用直线绘制星星,到目前为止,我所做的是正确的,但是如果有人可以帮助我使用其他变量并将其应用于我的代码,很棒:D
2个代码:
let navigationController = self.navigationController
self.navigationController?.setToolbarHidden(false,animated: false)
let autoLinkUrl = (messageBody!["autoLinkUrl"] as? String)!
print(autoLinkUrl) /* prints: https://news.ycombinator.com/ */
if let requestURL = URL(string: autoLinkUrl) {
print(requestURL) /* prints: https://news.ycombinator.com/ */
let request : URLRequest? = URLRequest(url: requestURL)
print(request) /* prints: Optional(https://news.ycombinator.com/) */
self.websiteRecordingVC!.webView.load(request!) /* Fatal error is raised here */
navigationController!.pushViewController(self.websiteRecordingVC!,animated: true)
}
3个请求:
到目前为止,这是我所拥有的,这是正确的,但是我想做出更多的变量并做出更多的线条来成为一颗星星。如果有人可以告诉我这些变量并应用它们,那就太好了!
解决方法
您可以像定义一样继续,只需定义更多coordinateX
变量即可。但是,这最终将成为问题。想象一下有数百个单独的变量!
一种更好的方法是使用Python列表保存所有坐标:
point_list = [ (250,0),(500,250) ]
(关于Python列表的在线tutorials有很多。)
可以使用带有索引号(从零开始)的方括号表示法来访问(或分配)每个元素,因此point_list[0]
为(250,0)
;并且point_list[1]
是(500,250)
。要获取每个坐标的x,y部分,您可以添加另一对方括号,或一次获取所有部分:
first_x = points_list[0][0] # 250
first_y = points_list[0][1] # 0
first_x,first_y = points_list[0] # 250,0
列表可以容纳大量点,例如,一个简单的三点星:
point_list = [ (148,170),(200,20),(252,(356,290),260),(44,290) ]
将它们保存在列表中的另一个好处是,您可以使用PyGame函数pygame.draw.polygon()
将它们简单地绘制到屏幕上。
pygame.draw.polygon( window,YELLOW,point_list,1 )
或者您可以在列表中“重复”,画出线条:
for i in range( len( points_list ) - 1 ):
pygame.draw.line( screen,white,points_list[i],points_list[i+1],5 )
请注意,我使用了列表长度len()
减,所以在引用[i+1]
时,我们没有遍历列表的末尾。 / p>
这是我使用上述想法写的一个简单示例:
代码:
import pygame
# Window size
WINDOW_WIDTH = 400
WINDOW_HEIGHT = 400
DARK_BLUE = ( 3,5,54)
STARRY = ( 230,255,80 )
### initialisation
pygame.init()
window = pygame.display.set_mode( ( WINDOW_WIDTH,WINDOW_HEIGHT ) )
pygame.display.set_caption("Star")
# Define a star
centre_coord = ( WINDOW_WIDTH//2,WINDOW_HEIGHT//2 )
star_points = [ (165,151),(235,(371,144),(257,219),(306,346),(94,(143,(29,144) ]
### Main Loop
clock = pygame.time.Clock()
done = False
while not done:
# Handle user-input
for event in pygame.event.get():
if ( event.type == pygame.QUIT ):
done = True
# Re-draw the window
window.fill( DARK_BLUE ) # background fill
pygame.draw.polygon( window,STARRY,star_points ) # Draw the star
pygame.display.flip() # Update the display
# Clamp FPS
clock.tick_busy_loop(60)
pygame.quit()
或者是32个坐标的16点星:
point_list = [ (173,63),(227,(269,34),(278,84),(327,73),(316,122),(366,131),(337,173),(380,200),227),269),278),327),316),366),337),380),(173,(131,(122,(73,(84,(34,(63,(20,34) ]
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。