- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我的游戏有问题,这不是错误而是问题。我正在使用 spritesheets 来制作我的游戏并使用 for 循环自动调用我的 Platform 类。但是,当我尝试调用平台类时,它只显示整个 spritesheet。类平台或 level_1 中可能有错误,但我不确定它是什么。如果你有pygame,请你能帮助我吗? An image of what is happening
import pygame
# Colours + Global constants
WHITE = (255, 255, 255)
RED = (255, 0, 0)
GREEN = (0, 255, 0)
BLUE = (0, 0, 255)
BLACK = (0, 0, 0)
RANDOM = (12, 211, 123)
WIDTH = 800
HEIGHT = 600
SIZE = (WIDTH, HEIGHT)
# CLASSES
# Block is the common platform
平台类:
class Platform(pygame.sprite.Sprite):
def __init__(self, display, x_screen, y_screen, x_sheet, y_sheet, height, length):
super().__init__()
self.image = pygame.image.load("tiles_spritesheet.png")
self.rect = self.image.get_rect()
display.blit(self.image, (x_screen, y_screen), (x_sheet, y_sheet, height, length))
Level_1 类:
class Level01(Level):
def __init__(self, player1, monster, display):
# Initialise level1
super().__init__()
# Level01 things
block = Block(WIDTH*3, 3, BLACK)
Level.all_things = self.all_things
self.sprites.add(player1, monster)
self.platforms.add(block)
self.all_things.add(player1, block, monster)
theLevel = [[1, HEIGHT, 0, 0],
[1, HEIGHT, WIDTH*3, 0]]
level = [[600, 400, 710, 0, 70, 70]]
for platform in theLevel:
block = Block(platform[0], platform[1], RED)
block.rect.x = platform[2]
block.rect.y = platform[3]
self.platforms.add(block)
self.all_things.add(block)
for goodPlatform in level:
platform = Platform(display, goodPlatform[0], goodPlatform[1], goodPlatform[2], goodPlatform[3], goodPlatform[4], goodPlatform[5])
self.platforms.add(platform)
self.all_things.add(platform)
主要内容:
def main():
# Init pygame
pygame.init()
# Set screen
background = pygame.image.load("background.jpg")
backgroundRect = background.get_rect()
display = pygame.display.set_mode(background.get_size())
# Creating FPS thingy
clock = pygame.time.Clock()
# Making levels + Player
monster = Monster(30, 30, RANDOM)
player = Player()
level_1 = Level01(player, monster, display)
# Choosing level
levelList = []
levelList.append(level_1)
currentLevelNumber = 0
currentLevel = levelList[currentLevelNumber]
y_speed = -5
# Game loop
loop = True
while loop == True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_RIGHT:
player.move_right()
if event.key == pygame.K_LEFT:
player.move_left()
if event.key == pygame.K_UP:
player.move_up(currentLevel.platforms)
if event.key == pygame.KMOD_LSHIFT and event.key == pygame.K_RIGHT:
player.sprint()
if event.type == pygame.KEYUP:
if event.key == pygame.K_LEFT and player.sprite_x_change < 0:
player.stop()
if event.key == pygame.K_RIGHT and player.sprite_x_change > 0:
player.stop()
if event.key == pygame.KMOD_LSHIFT:
player.sprite_x_change -= 10
# Update things
#monster.jump()
if player.rect.x > 400:
player.rect.x = 400
currentLevel.scroll_x(-10)
if player.rect.x >= WIDTH:
player.rect.x = WIDTH
currentLevel.scroll(0)
if player.rect.y >= HEIGHT:
main()
if player.sprite_x_change < 0 and player.rect.x >= 120:
currentLevel.scroll_x(0)
if currentLevel.shift_x >= WIDTH *3 - 400:
currentLevel.scroll_x(0)
sprite_x_change = 0
if player.rect.left <= 120 and player.sprite_x_change < 0:
player.rect.x = 120
player.rect.left = 120
currentLevel.scroll_x(10)
'''
if player.rect.y <= 300:
if player.standing == False and player.sprite_y_change < 0:
currentLevel.scroll_y(10)
if currentLevel.shift_y > 0:
y_speed = -4
if player.standing == True and player.rect.y < 300:
y_speed = 4
print(currentLevel.shift_y)
currentLevel.scroll_y(y_speed)
'''
display.blit(background, backgroundRect)
currentLevel.drawer(display)
# Refresh screen
player.updater(currentLevel.platforms)
clock.tick(30)
pygame.display.update()
pygame.quit()
loop = False
if __name__ == "__main__":
main()
最佳答案
Group
使用 self.image
和 self.rect
到 blit
元素 so
使用 pygame.Surface.subsurface 创建地下和 (x_sheet, y_sheet, height, length)
- 并分配给 self.image
将 (x_screen, y_screen, height, length)
分配给 self.rect
.
class Platform(pygame.sprite.Sprite):
def __init__(self, display, x_screen, y_screen, x_sheet, y_sheet, height, length):
super().__init__()
self.tiles = pygame.image.load("tiles_spritesheet.png")
self.image = self.tiles.subsurface(pygame.Rect(x_sheet, y_sheet, height, length))
self.rect = self.image.get_rect(x=x_screen, y=y_screen)
#display.blit(self.image, self.rect)
关于python - 所有 spritesheet 都显示在屏幕上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33833049/
关闭。这个问题是opinion-based .它目前不接受答案。 想要改进这个问题? 更新问题,以便 editing this post 可以用事实和引用来回答它. 关闭 7 年前。 Improve
我正在使用 SDL2 用 C 语言开发游戏,我的问题是该游戏是全高清的,并且具有长(180 帧)角色动画,会生成非常大的 Sprite 表。我有一个 7326x7250px 的 Sprite 表,我必
我有一个 spritesheet (9170px x 350px),其中包含 70 帧单个字符。这是我的代码。 @-webkit-keyframes play { 100% { backg
我在纹理打包器的帮助下生成了一个 CSS Spritesheet,它看起来像 .pirateSlotSprite {display:inline-block; overflow:hidden; bac
“简单”问题。 为站点元素使用大型 spritesheet 是否比使用多张图片更好? 我的意思是,额外的 CSS 图像处理(背景定位大图像并裁剪它)是否弥补了较少的 HTTP 图像请求? 最佳答案 n
我到处都能找到有关如何使用从 zwoptex 创建的文件运行动画的代码,但它使用的是已弃用的代码。我找不到有关如何使用 CCSpriteBatchNode 运行动画的代码。 有什么建议吗? 最佳答案
我有一个小问题,我使用的是多行 Spritesheet,其中每一行都是图像序列。 但是我无法让 Sprite 表从不同的高度开始(因此它可以向下移动),它们都从顶 Angular 开始 var sp
尝试在我的游戏中添加爆炸动画,但由于某种原因只播放 Sprite 的第一帧。 Spritesheet 在预加载器中加载。 这是调用动画的函数 function asteroidCollisionHan
我有一个 spritesheet 驱动一组按钮的外观,这些按钮会根据各种鼠标操作而变化。但是,在 sprite 之间切换时我可以看到闪烁,并且在 chrome 或 firebug 中查看网络面板确认每
目前,我有一个菜单场景,我在其中将 spritesheet 添加到帧缓存中。我反复离开菜单场景并返回。因此,每次重新加载菜单场景时,都会将相同的 spritesheet 添加到帧缓存中。这是坏事吗?旧
我创建了一个 spritesheet;在桌面上一切正常。但是,然后我尝试在我的 iPhone 5s 上查看它,它显示正常,但是当单击图像时,会立即出现一个深灰色框。我立即想到也许我有冲突的 CSS,但
我有一个描述 Sprite 表中 Sprite 的 xml 文件:
下面的代码片段应该播放 1-3 帧 3 次,并且(在我看来)在第 3 帧结束,而不是在完成后显示第 4 帧,这在之前的 3 次迭代中没有动画。 由于这在 Chrome、Safari 和 FF 中同样有
我有一个 Sprite 表,宽度为 5760 像素,高度为 5400 像素,包含 10 行和 6 列,每列宽度为 960 像素,高度为 540 像素。 Sprite 表中的所有 Sprite 都是从左
所以我为我正在制作的游戏制作了一个 sprite 表动画,但由于某种原因它远远落后于我的游戏。 Sprite 表是一个 1248x120 .png 文件,每个 Sprite 的大小为 156x120
我正在尝试使用 spritesheet 制作 Logo 动画,效果很好。代码就像 #logo { background: url('../img/logo.png'); height: 142
我的游戏有问题,这不是错误而是问题。我正在使用 spritesheets 来制作我的游戏并使用 for 循环自动调用我的 Platform 类。但是,当我尝试调用平台类时,它只显示整个 sprites
我想为我的图标使用 CSS Spritesheet。每个图标图像的大小为 48x48px。但是,我希望能够显示任意尺寸的图标。 现在,我正在使用,显示一个 24x24 图标,我使用: 有没有更短
我正在使用 Python 和 Pygame 开发游戏。我为其中一个敌人创建了一个 sprite 表,并让它运行了我的代码。问题是图像看起来有黑色背景,即使它是透明图像。它的代码是这样的: en
我正在尝试从 spritesheet 中选择背景图像的一部分,填充其容器中的整个空间。 在这支笔中,背景图像应始终填充字符。也在调整大小时,这是主要问题。 https://codepen.io/tim
我是一名优秀的程序员,十分优秀!