GVKun编程网logo

SpriteKit中反转Action需要注意的问题(stroop反转)

24

最近很多小伙伴都在问SpriteKit中反转Action需要注意的问题和stroop反转这两个问题,那么本篇文章就来给大家详细解答一下,同时本文还将给你拓展Cocos2d-x中对Sprite进行set

最近很多小伙伴都在问SpriteKit中反转Action需要注意的问题stroop反转这两个问题,那么本篇文章就来给大家详细解答一下,同时本文还将给你拓展Cocos2d-x中对Sprite进行setTexture时,调用SpriteBatchNode对象时需要注意的问题、git常用命令与需要注意的问题、ios – FPS在SpriteKit中下降、ios – SKAction scaleBy:duration:SpriteKit等相关知识,下面开始了哦!

本文目录一览:

SpriteKit中反转Action需要注意的问题(stroop反转)

SpriteKit中反转Action需要注意的问题(stroop反转)

大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处.
如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! hopy ;)

我们知道在SpriteKit中同样有Cocos2D中类似的Action的概念,某些Action也是可以反转的.

你可能要问我怎么知道哪些Action是可反转的,哪些不能?这个好办,一般你可以通过看Action的类型初步的判断,比如哪些MoveByXXX的动作都是可以反转的,因为其中动作的变化是相对的!而那些MovetoXXX的动作自然是不可以反转的.

如果拿不准主意的,你尽可以查看对应Action的Api说明,里面说的很清楚!

那么如果我们反转一个不能反转的Action会发生神马?App会可耻的崩溃掉吗!?答案是:NO!在这种情况下会返回原来相同的Action!这点要记住!

还有,对应序列Action的反转,其实是序列中每个Action的反转最后序列数组再一次反转,有码为证:

let actionMidMove = SKAction.moveByX(-size.width/2-enemy.size.width/2,y: -CGRectGetHeight(playableRect)/2 + enemy.size.height/2,duration: 1.0)
        let actionMove = SKAction.moveByX(-size.width/2-enemy.size.width/2,y: CGRectGetHeight(playableRect)/2 - enemy.size.height/2,duration: 1.0)
        let actionMoveY = SKAction.moveByX(0,y: 50,duration: 1.0)
        //let reverseMid = actionMidMove.reversedAction()
        //let reverseMove = actionMove.reversedAction()
        let wait = SKAction.waitForDuration(3.0)
        let blk = SKAction.runBlock() {
            print("Reached bottom 1")
        }
        let blk2 = SKAction.runBlock() {
            print("Reached bottom 2")
        }
        let halfSeq = SKAction.sequence([actionMidMove,actionMoveY,blk,wait,blk2,actionMove])
        //let seq = SKAction.sequence([actionMidMove,actionMove,reverseMove,reverseMid])
        let seq = SKAction.sequence([halfSeq,halfSeq.reversedAction()])
        enemy.runAction(seq)

Cocos2d-x中对Sprite进行setTexture时,调用SpriteBatchNode对象时需要注意的问题

Cocos2d-x中对Sprite进行setTexture时,调用SpriteBatchNode对象时需要注意的问题

一个单独的A类,继承自Sprite类,因为某些原因需要重新setTexture,并且是SpriteBatchNode的对象,本以为是个小改,没想到重新运行后什么图像都没了……

重新找了一下原因,发现Sprite的createWithTexture方法中,在initWithTexture方法最后里面不仅setTexture,还setTextureRect。HOHO,原来是这个原因,所以光针对Sprite去setTexture还不够,还需要在后面补充一个setTextureRect才可以。


	SpriteBatchNode* BatchNode = SpriteBatchNode::create("a.png",10000);
	for (Index; Index < 10000; Index++)
	{
		A* pA = A::create();
<span>		</span>pA->setTexture(BatchNode->getTexture());
		Rect _rect = Rect::ZERO;
		_rect.size = BatchNode->getTexture()->getContentSize();
		pA->setTextureRect(_rect);
		pA->setPosition(100,i);
<span>		</span>this->addChild(pA);
	}

git常用命令与需要注意的问题

git常用命令与需要注意的问题

git add  添加到暂存区   
也可以这样说:把本地的修改加到stage中  

git status 查看状态

git commit -m ''comments here'' //把stage中的修改提交到本地库,comments here 是提交日志msg

git push //把本地库的修改提交到远程库中

未使用过的:
git branch -r/-a //查看远程分支/全部分支
git checkout master/branch //切换到某个分支
git merge master //假设当前在test分支上面,把master分支上的修改同步到test分支上
git stash //把未完成的修改缓存到栈容器中
git stash list //查看所有的缓存
git stash pop //恢复本地分支到缓存状态
git blame someFile //查看某个文件的每一行的修改记录()谁在什么时候修改的)
git status //查看当前分支有哪些修改
git log //查看当前分支上面的日志信息
git diff //查看当前没有add的内容
git diff --cache //查看已经add但是没有commit的内容

https://www.cnblogs.com/allanli/p/git_commands.html


注1:git commit -m 与 git commit -am的区别
一、通常我们修改一个文件并且将文件提交到本地的分支并且推送到远程服务器的操作如下:
git add .
git commit -m "some str"
git push
二、我们也可以将上面的三大步简化一下:
git commit -am "some str"
git push
三、针对第一步中的git  add .命令的作用就是将本地修改过的文件且已经追踪的文件添加到本地的暂存区,
然后使用git commit -m "str"命令将暂存区的代码提交到本地仓库,最后将本地仓库的代码推送到远程服务器端;
第二部其实就相当于第一步的结合,但是有区别的是git commit -am ''str''命令只能提交已经追踪过且修改了的文件,
去过是新增文件就必须使用第一步的命令;

ios – FPS在SpriteKit中下降

ios – FPS在SpriteKit中下降

我正在开发一个简单的游戏与 Swift& SpriteKit,我注意到FPS从60到58-59(从而退回).当出现下降时,会出现明显的滞后 – 看起来1或2帧被丢弃.

cpu负载大约为20-25%,并没有变化,内存使用量永远在8 MB左右.

截图:

屏幕上有6个对象:标签,红色对象(Sprite),2x绿色对象(Sprite),一个框(Sprite)和“Ground”(Rect shape node)).

除标签外的所有对象都有物理主体(以白色边框显示).

动态创建绿色和白色的对象,从右到左移动并在屏幕外被破坏:

func scheduleAddingLiquid() {
let wait = SKAction.waitForDuration(NSTimeInterval(getRandomNumber(1,end: 3)))
        let block = SKAction.runBlock({
            [uNowned self] in

            let liquidNode = LiquidNode(texture: self.liquidTexture,sceneFrame: self.frame)
            self.addChild(liquidNode)
            liquidNode.move()

            self.scheduleAddingLiquid()
        })

        let sequence = SKAction.sequence([wait,block])
        runAction(sequence)

和:

func move() {
        let moveAction = SKAction.movetoX(-frame.width,duration: NSTimeInterval(3))
        let removeBlock = SKAction.runBlock({
            [uNowned self] in

            self.removeFromParent()
            })

        runAction(SKAction.sequence([moveAction,removeBlock]))
    }

红色对象“跳”屏幕触摸:

if touches.count > 0 && isHeroOnGround && heronode != nil {
            isHeroOnGround = false
            heronode.physicsBody?.veLocity = CGVector(dx: 0,dy: 0)
            heronode.physicsBody?.applyImpulse(CGVector(dx: 0,dy: 400))
        }

滞后发生在“跳跃”之后的随机时间间隔内(跳跃后约0.5至1.5秒).

发生碰撞时,不会发生碰撞,只是当红色物体在空中时.而且不是每一次跳跃.当FPS下降时,cpu负载不会增长.

测试在iOS 9.3,iPad mini 2.

更新1.在iOS 9.3上测试iPhone 6 – 前几秒钟,FPS约为50-55,然后不间断地为60.所以,它只在iPad mini 2上(我只有这两个设备,不能在其他设备上测试).

UPD 2.我已经注释掉了所有的对象创建代码,除了红色数字. “跳”时仍然滞后.所以,现在我确定它与applyImpulse方法有关.

UPD 3.这真的很真奇怪:我已经从touchesBegan方法中删除了所有代码,并且它仍然在触动上拖延!该方法是完全空的.我不知道为什么,但如果我点击几次,FPS下降…

如何调试?

解决方法

只有迷你的问题让我觉得你的迷你(或迷你的特定包)有问题.尝试制作一个新项目,复制文件,然后再次运行.另外,你说9.3,但是有9.3.1,9.3.2等.这两个设备可能有不同的构建.

所以,首先,确保您的iPhone和iPad运行相同的iOS版本.也许有一个错误,或者也许他们修补了一个错误(从而导致一个工作,而不是另一个).

另外,尝试运行它在不同的仿真器…如果它运行完美的仿真器,那么我甚至更加怀疑的迷你(在它的当前配置).

这样,你也可以看看(也许)问题与iPhone(4:3或者iPad的任何一个)的方向有关.

有时候,我的项目文件(甚至没有插件)都会发生“非常奇怪”的事情,只需创建一个新的项目,将所有文件复制到固定的位置.如果在点击一个空的“touchesBegan”时,它是滞后的…让我认为Xcode /你的迷你的东西在手边 – 因为它只发生在那个设备上(因此我们知道到目前为止)…

其他要考虑的事情,

>您使用哪个版本的Xcode?尝试最新的beta /返回到7.3.有什么区别?
>你有另外一台电脑,你可以尝试建立项目吗?
>如果将[uNowned self]或将它留下来,没有修改任何东西,那么我的建议是用print语句加载你的代码,看看发生了什么.
>如果您使用场景编辑器制作精灵节点,请将其全部删除并重新制作,或尝试以编程方式进行编辑.这在我的一些项目中修复了随机错误(似乎没有理由).

我们需要更多的代码/信息,但上述应该希望解决您的问题.

ios – SKAction scaleBy:duration:SpriteKit

ios – SKAction scaleBy:duration:SpriteKit

我在使用[SKAction scaleBy:duration:]尝试制作一个大小的圆圈时遇到了麻烦

SKAction *scaleDown = [SKAction scaleBy:0.2 duration:1.8];  
SKAction *scaleUp= [scaleDown reversedAction];
SKAction *fullScale = [SKAction sequence:@[scaleDown,scaleUp,scaleDown,scaleUp]];
[_circleChanging runAction:fullScale];

我得到的是圆圈变得如此之小以至于消失然后又不会回来.它必须变小,然后再回到原来的大小做2次.

解决方法

尝试:

SKAction *scaleDown = [SKAction scaleto:0.2 duration:0.75];
       SKAction *scaleUp= [SKAction scaleto:1.0 duration:0.75];
       SKAction *fullScale = [SKAction repeatActionForever:[SKAction sequence:@[scaleDown,scaleUp]]];
       [_circleChanging runAction:fullScale];

关于SpriteKit中反转Action需要注意的问题stroop反转的介绍现已完结,谢谢您的耐心阅读,如果想了解更多关于Cocos2d-x中对Sprite进行setTexture时,调用SpriteBatchNode对象时需要注意的问题、git常用命令与需要注意的问题、ios – FPS在SpriteKit中下降、ios – SKAction scaleBy:duration:SpriteKit的相关知识,请在本站寻找。

本文标签: