我剛開始與pygame的工作,我試圖做一個半透明的精靈,而精靈的源文件是從磁盤加載的非透明位圖文件。我不想編輯源圖像,如果我可以幫助它。我相信有一種方法可以用pygame代碼來做到這一點,但Google對我毫無幫助。如何使半透明的精靈在pygame的
4
A
回答
2
我可能還沒有在我原來的問題清楚,但我想我想通了我自己。我正在尋找的是Surface的set_alpha()方法,所以我所要做的就是確保半透明圖像在它們自己的表面上。
這裏是我的精簡代碼的例子:
import pygame, os.path
from pygame.locals import *
class TranslucentSprite(pygame.sprite.Sprite):
def __init__(self):
pygame.sprite.Sprite.__init__(self, TranslucentSprite.container)
self.image = pygame.image.load(os.path.join('data', 'image.bmp'))
self.image = self.image.convert()
self.image.set_colorkey(-1, RLEACCEL)
self.rect = self.image.get_rect()
self.rect.center = (320,240)
def main():
pygame.init()
screen = pygame.display.set_mode((640,480))
background = pygame.Surface(screen.get_size())
background = background.convert()
background.fill((250,250,250))
clock = pygame.time.Clock()
transgroups = pygame.sprite.Group()
TranslucentSprite.container = transgroups
"""Here's the Translucency Code"""
transsurface = pygame.display.set_mode(screen.get_size())
transsurface = transsurface.convert(screen)
transsurface.fill((255,0,255))
transsurface.set_colorkey((255,0,255))
transsurface.set_alpha(50)
TranslucentSprite()
while 1:
clock.tick(60)
for event in pygame.event.get():
if event.type == QUIT:
return
elif event.type == KEYDOWN and event.key == K_ESCAPE:
return
transgroups.draw(transsurface)
screen.blit(background,(0,0))
screen.blit(transsurface,(0,0))
pygame.display.flip()
if __name__ == '__main__' : main()
這是最好的技術?這似乎是最簡單直接的。
3
加載圖像後,你將需要啓用的Surface
alpha通道。將看起來有點像這樣:
background = pygame.Display.set_mode()
myimage = pygame.image.load("path/to/image.bmp").convert_alpha(background)
這將加載圖像,並立即將其轉換爲適合於alpha混合到顯示錶面上的像素格式。如果您需要以其他格式的屏幕緩衝區溢出,您可以使用其他表面。
您可以設置每個像素的阿爾法足夠簡單,假設你有一個函數,它接受一個3元組RGB顏色值,並返回RGBA顏色+阿爾法的一些期望4tuple,你可以改變每個像素的表面:
def set_alphas(color):
if color == (255,255,0): # magenta means clear
return (0,0,0,0)
if color == (0,255,255): # cyan means shadow
return (0,0,0,128)
r,g,b = color
return (r,g,b,255) # otherwise use the solid color from the image.
for row in range(myimage.get_height()):
for col in range(myimage,get_width()):
myimage.set_at((row, col), set_alphas(myimage.get_at((row, col))[:3]))
還有其他的,更有效的方式來做到這一點,但是這給你的想法,我希望。
1
則可以考慮使用PNG圖像在那裏你可以做你直接要在圖像中任何形式的透明度。
2
如果你的圖像有一個純色背景,你希望它變成透明的,你可以將它設置爲color_key的值,pygame會使圖片在曝光時變透明。
如:
color = image.get_at((0,0)) #we get the color of the upper-left corner pixel
image.set_colorkey(color)
相關問題
- 1. Pygame中的透明精靈
- 2. 透明度在CSS精靈
- 3. pygame的:使用精靈
- 4. PyGame組的精靈
- 5. pygame - 如何羣組精靈
- 6. 如何使pygame的半透明圖像動態
- 7. 刪除精靈在Pygame的
- 8. 當使用Pygame中的colorkey透明度對精靈進行blitting時,應該透明的區域是黑色的
- 9. 使精靈跳躍在Pygame的
- 10. 如何使JTextField半透明
- 11. 如何使jPanel半透明?
- 12. 如何使精靈的某些部分透明?
- 13. Python - Pygame - 渲染半透明文本
- 14. OpenGL的透明/半透明
- 15. pygame中的Pixilating精靈
- 16. 動畫pygame的精靈
- 17. 如何使pygame sprite的背景透明
- 18. 如何設置在Flash透明的精靈背景是什麼?
- 19. 如何讓我的精靈在Slick2D中具有透明背景?
- 20. QML:如何創建半透明/半透明的WebView元素?
- 21. Cocos2d,旋轉(透明)精靈碰撞
- 22. 用Allegro實現C++透明精靈
- 23. SDL透明精靈正方形
- 24. Actionscript 3 - 如何檢測透明精靈的碰撞
- 25. 使UINavigationBar半透明
- 26. XNA動畫精靈從透明到不透明
- 27. Winforms半透明PNG半透明PNG
- 28. 如何使用pygame中的精靈矩形的邊?
- 29. 如何給QDialog半透明?
- 30. 半透明的seekbar