标签: flappy-bird-clone

在安卓游戏中令人讨厌的滞后/口吃

我刚开始在android中进行游戏开发,而我正在开发一款超级简单的游戏.

这场比赛基本上就像飞扬的小鸟.

我设法让一切工作,但我得到了很多口吃和滞后.

我用来测试的手机是LG G2,所以它应该并且确实运行的游戏比这更重,更复杂.

基本上有4个"障碍"是全屏宽度彼此分开.
当游戏开始时,障碍物开始以恒定速度移动(朝向角色).玩家角色的x值在整个游戏中是一致的,而其y值会发生变化.

滞后主要发生在角色穿过障碍物时(有时也会在障碍物之后).会发生的是,游戏状态的每个图形都存在不均匀的延迟,导致运动中出现断断续续的情况.

  • GC不会根据日志运行.
  • 口吃不是由于速度太高造成的(我知道因为在游戏开始时障碍物不在视线范围内,角色移动得很顺利)
  • 我不认为问题也与FPS有关,因为即使将MAX_FPS字段设置为100,仍然会出现断断续续的情况.

我的想法是有一行或多行代码导致某种延迟发生(因此跳过帧).我也认为这些线路应该是围绕update()draw()方法PlayerCharacter,Obstacle以及MainGameBoard.

问题是,我还是专门针对Android开发和Android 游戏开发的新手,所以我不知道是什么原因导致这种延迟.

我试着在网上寻找答案......不幸的是,我发现所有这些都指向了GC.但是,我不相信这种情况(如果我错了,请纠正我)这些答案对我不适用.我也阅读了android开发者的Performance Tips页面,但找不到任何帮助.

所以,请帮助我找到解决这些令人讨厌的滞后的答案!

一些代码

MainThread.java:

public class MainThread extends Thread {

public static final String TAG = MainThread.class.getSimpleName();
private final static int    MAX_FPS = 60;   // desired fps
private final static int    MAX_FRAME_SKIPS = 5;    // maximum number of frames to be skipped
private final static int    FRAME_PERIOD = 1000 / MAX_FPS;  // …
Run Code Online (Sandbox Code Playgroud)

java android surfaceview game-loop flappy-bird-clone

18
推荐指数
2
解决办法
9388
查看次数

从舞台上移除演员?

我使用LibGDX并在我的游戏中只移动相机.昨天我创造了一种在游戏中占据一席之地的方法.我正在尝试克隆Flappy Bird,但我在绘制正在屏幕上移动的地面时遇到了问题.在每次渲染调用中,我都会添加一个新ActorStage,但是几次之后绘图就不再流动了.每秒帧数下降得非常快.还有另一种方法可以在游戏中取得进展吗?

java draw game-engine libgdx flappy-bird-clone

15
推荐指数
3
解决办法
2万
查看次数

Swift SpriteKit PhysicsBody被Xcode强制为可选

我有以下问题尝试使用Swift和SpriteKit在Xcode 6 beta 7中编写一个飞扬的鸟类克隆.

在我将physicsBody属性添加到SKSpriteNode之后,我无法直接更改physicsBody的属性,例如我无法执行以下操作:

bird = SKSpriteNode(texture: birdTexture1)
bird.position = CGPoint(x: self.frame.size.width / 2.8, y: CGRectGetMidY(self.frame))
bird.runAction(flight)
bird.physicsBody = SKPhysicsBody(circleOfRadius: bird.size.height/2)
bird.physicsBody.dynamic = true
bird.physicsBody.allowsRotation = false
Run Code Online (Sandbox Code Playgroud)

Xcode构建将失败并且在两行上出现错误,我在其中添加了dynamic和allowRotation值到PhysicsBody,我能做到的唯一方法是执行以下操作:

bird.physicsBody?.dynamic = true
bird.physicsBody?.allowsRotation = false
Run Code Online (Sandbox Code Playgroud)

使用'?'将physicsBody作为可选项的问题 这个特性使得在尝试操纵我想添加的一些鸟类物理时进行某些操作变得很复杂,比如移动时的旋转.

关于如何避免/修复必须将physicsBody属性标记为可选的任何建议?( 'physicsBody?')

谢谢!

问题的屏幕截图http://new.tinygrab.com/1afb7d57d73040945157fec7b418aa2caed4a72acd.png 放大问题的屏幕截图http://new.tinygrab.com/1afb7d57d7c7502078cab3568b6dc36285cc8dea51.png

ios sprite-kit skphysicsbody flappy-bird-clone swift

6
推荐指数
1
解决办法
1551
查看次数

Pygame碰撞Bug

我对pygame很新,遇到了一个我无法自行解决的错误.我正在尝试编写Flappy Bird游戏.问题是碰撞检测有效,但它也与我的精灵混淆.如果我设法在比赛时遇到第一个障碍,那么差距将随机重置.但差距应始终相同,只是在另一个位置.如果我删除碰撞检测,它完全正常.有任何想法吗?

import pygame    
import random      

randomy = random.randint(-150, 150)

class Bird(pygame.sprite.Sprite):
    def __init__(self):
        pygame.sprite.Sprite.__init__(self)

        self.image = pygame.Surface((25,25))
        self.image.fill((255,255,255))
        self.rect = self.image.get_rect()
        self.rect.center = (100, 200)
        self.velocity = 0.05
        self.acceleration =0.4

    def update(self):
        self.rect.y += self.velocity
        self.velocity += self.acceleration
        if self.rect.bottom > 590:
            self.velocity = 0
            self.acceleration = 0                                


class Pipe1(pygame.sprite.Sprite):
    def __init__(self):
        pygame.sprite.Sprite.__init__(self)

        self.image = pygame.Surface((85, 500))
        self.image.fill((255, 255, 255))
        self.rect = self.image.get_rect()
        self.rect.center = (500, randomy)
        self.randomyupdate = random.randint(-150, 150)

    def update(self):
        self.rect.x -= 2
        if self.rect.x < …
Run Code Online (Sandbox Code Playgroud)

python pygame flappy-bird-clone

3
推荐指数
1
解决办法
137
查看次数