鱼C论坛

 找回密码
 立即注册
查看: 1450|回复: 6

[已解决]Pygame: 第84讲有关temp.blit的问题

[复制链接]
发表于 2019-6-3 23:37:10 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
之前听的时候没有弄清楚blit_alpha中的temp.blit(target,(-x,-y)), target 是背景,明明比temp的窗口要大,为什么第二个参数是(-x,-y) ? 我试了下第二个参数用(x,y) 或者 (0,0), 甚至直接把 x=position[0]  y=position[1]   temp.blit(target,(-x,-y))  
这三句删掉,感觉效果都没有区别。。。谁能告知有什么区别吗?  是pygame模块升级了吗?确实有点没看懂 temp.blit(target,(-x,-y))  的意义,求助,谢谢~~
  1. import pygame
  2. import sys
  3. from pygame.locals import *
  4. #pygame initionization
  5. pygame.init()
  6. size=width,height=800,600
  7. bg=0,0,0
  8. clock=pygame.time.Clock()
  9. #window create
  10. screen=pygame.display.set_mode(size)

  11. #window title
  12. pygame.display.set_caption("First time to meet, take care of me!")
  13. turtle=pygame.image.load('turtle.png').convert_alpha()
  14. background=pygame.image.load('background.jpg').convert()
  15. position=turtle.get_rect()
  16. position.center=width//2,height//2
  17. def blit_alpha(target,source,location,opacity):
  18.     temp=pygame.Surface((source.get_width(),source.get_height())).convert()
  19.     x=position[0]
  20.     y=position[1]   
  21.     temp.blit(target,(-x,-y))
  22.     temp.blit(source,(0,0))
  23.     temp.set_alpha(opacity)
  24.     target.blit(temp,location)
  25. while True:
  26.     for event in pygame.event.get():
  27.         if event.type==QUIT:
  28.             sys.exit()
  29.     screen.blit(background,(0,0))
  30.     blit_alpha(screen,turtle,position,200)
  31.     pygame.display.flip()
  32.     clock.tick(30)
复制代码

最佳答案
2019-6-4 15:18:15
-x,-y是考虑你的背景,为了让王八在0,0
背景相对位置不变,所以跑到-想,-x,-y
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2019-6-4 15:18:15 | 显示全部楼层    本楼为最佳答案   
-x,-y是考虑你的背景,为了让王八在0,0
背景相对位置不变,所以跑到-想,-x,-y
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-6-5 12:59:16 From FishC Mobile | 显示全部楼层
那改成0,0为什么还是在那个位置呢?怎么做才能看到-x, -y 和0,0或者x,y在效果上的差别呢?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-6-5 18:34:43 | 显示全部楼层
而且固定王八的位置用的是这句话吧?   target.blit(temp,location)  
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-6-5 18:51:47 | 显示全部楼层
你发消息最好@,不然不知道跟谁说,你一直就没明白要做的是什么,是固定位置,但是你没明白函数里temp是个什么东西
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-6-5 23:53:05 | 显示全部楼层
@塔利班  temp是创建的一个Surface 对象,相当于是个小窗口,里面可以挂图,temp.blit(a,b) 把 a对象挂在temp中的b位置。我也能理解temp.(screen,(-x,-y)) 是把temp自己放在screen中的(x,y)位置。但是 target.blit(temp,location) 本身就可以决定temp要被挂在screen的哪个位置中,而且这句话是必要的。就算有temp.(screen,(-x,-y)), 没有target.blit(temp,location) 一样不会显示出来。所以我才说 temp.(screen,(-x,-y)) 是没有必要的,因为 target.blit(temp,location) 已经把temp的位置唯一确定了,不管要不要temp.blit(screen,position),都无所谓。因此才觉得temp.(screen,(-x,-y))  很奇怪。也没有看到temp.(screen,(-x,-y)) ;  temp.(screen,(x,y))  ; temp.(screen,(0,0)) 之间表现的效果的不同,这才是关键。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-6-8 00:06:57 | 显示全部楼层
终于明白了。。。 之前选的图片是充满了整个方形区域的png文件, 所以根本看不到效果。。。。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-6-28 04:23

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表