问题描述
这个class LauncherActivity : Branch.BranchReferralInitListener {
override fun onStart() {
super.onStart()
Branch.sessionBuilder(this).withCallback(this).withData(parseIntent().data).init()
if (BuildConfig.DEBUG) {
IntegrationValidator.validate(this)
}
}
private fun parseIntent(): Intent {
var newIntent = Intent()
newIntent = newIntent.putExtra("branch_force_new_session",true)
newIntent = newIntent.putExtra("branch",intent.dataString)
return newIntent
}
override fun onNewIntent(intent: Intent) {
super.onNewIntent(intent)
this.intent = intent
Branch.sessionBuilder(this).withCallback(this).withData(parseIntent().data).reInit()
}
override fun onInitFinished(referringParams: JSONObject?,error: BranchError?) {
if (error != null) {
// Getting error only when app is not backgrounded
} else if (referringParams != null) {
// When app is backgrounded,it works
}
}
}
类来自pygame.sprite。我想使用Rectangle
来修改矩形的圆角。例如https://imgur.com/2N5NHlg
set_rounded
class Rectangle(pg.sprite.Sprite):
def __init__(self):
pg.sprite.Sprite.__init__(self)
self.original_image = pg.Surface((10,10))
self.image = self.original_image
self.rect = self.image.get_rect()
def set_rounded(self,roundness):
pass
参数将确定圆角矩形的半径。
解决方法
您可以通过设置功能pygame.draw.rect
的关键字参数border_radius
来实现所需的目标。
创建一个与图像大小相同且矩形像素为(SRCALPHA
的矩形,然后绘制带有圆角的完全白色,不透明的图像:
size = self.original_image.get_size()
self.rect_image = pg.Surface(size,pg.SRCALPHA)
pg.draw.rect(self.rect_image,(255,255,255),(0,*size),border_radius=roundness)
复制原始图像,然后使用BLEND_RGBA_MIN
混合模式将矩形与图像混合(请参见pygame.Surface.blit
):
self.image = self.original_image.copy().convert_alpha()
self.image.blit(self.rect_image,0),None,pg.BLEND_RGBA_MIN)
请注意,关键字属性border_radius
是一项新功能。您必须使用最新的pygame版本(2.0.0.dev10)。
如果不能使用2.0.0.dev10版本,则需要自己将圆角矩形粘在一起:
class Rectangle(pg.sprite.Sprite):
# [...]
def set_rounded(self,roundness):
size = self.original_image.get_size()
self.rect_image = pg.Surface(size,pg.SRCALPHA)
#pg.draw.rect(self.rect_image,border_radius=roundness)
r,c = roundness,255)
pg.draw.rect(self.rect_image,c,(r,size[0]-2*r,size[1]))
pg.draw.rect(self.rect_image,r,size[0],size[1]-2*r))
for cpt in [(r,r),(size[0]-r,size[1]-r),size[1]-r)]:
pg.draw.circle(self.rect_image,cpt,r)
self.image = self.original_image.copy().convert_alpha()
self.image.blit(self.rect_image,pg.BLEND_RGBA_MIN)
查看示例:
import pygame as pg
class Rectangle(pg.sprite.Sprite):
def __init__(self):
pg.sprite.Sprite.__init__(self)
self.original_image = pg.Surface((100,100))
self.original_image.fill((255,0))
self.image = self.original_image
self.rect = self.image.get_rect()
def set_rounded(self,pg.SRCALPHA)
pg.draw.rect(self.rect_image,border_radius=roundness)
self.image = self.original_image.copy().convert_alpha()
self.image.blit(self.rect_image,pg.BLEND_RGBA_MIN)
pg.init()
window = pg.display.set_mode((200,200))
rect_object = Rectangle()
rect_object.set_rounded(30)
rect_object.rect.center = window.get_rect().center
group = pg.sprite.Group(rect_object)
run = True
while run:
for event in pg.event.get():
if event.type == pg.QUIT:
run = False
window.fill((128,128,128))
group.draw(window)
pg.display.flip()