phaser-游戏问题

2022-12-05  本文已影响0人  skoll

计算场景内活动物体的数量

1 .星星收集完毕之后,也就是数量为0的时候。要发射一个子弹并且给出下一波星星,但是现在用matterJs发现没有返回场景内物体的方法。而且没有组的概念,没法方便的管理同一组类型的物体,虽然可以遍历场景内的全部物体来看出是否以已经收集完毕,但是如果场景内物体多的话,这种方法肯定不行,所以需要引入一个startCount的变量来标记
2 .某些物体不能完全反弹,弹一会就停下了。感觉是重力的问题,和重力没关系,就是没有完全反弹.最后会停住,奇怪.主要最后全都卡在角落里面了
3 .需要一个平衡的世界,没有任何东西,按照一个初始的速度进去,按理说应该是永远不会停下来的
4 .板子动的时候,玩家没有跟着板子动,静摩擦力设置不成功。

1 .感觉不是摩擦力的问题,而是板子动的方式不太对,现在板子是动画在动,其实应该是力推动他动
2 .身体是静止的,所以必须手动更新速度以使摩擦发挥作用
3 .板子想要移动,必须不是isStatic,还要忽略掉重力。但是这样的板子,别的东西上去,回立马把他压下来。还要求一个物体的受力变化,当他受到的力大于某个值,才会下降。板子才会断掉。或者需要先屏蔽,某个程度的力,对他不影响
4 .所以最后的解决是要把两个结合起来.首先摩擦力的触发是需要受力,所以要给平板一个力。其次平板在这里是一个static元素,添加力是不会变化的,真的板子发生运动是通过控制他的x位置来操作的。
5 .总结:摩擦力效果,需要力给,具体板子运动,需要你移动板子,其次享受摩擦力作用的元素,摩擦力要给他加到最大
this.count+=0.014

            const px=400+100*Math.sin(this.count)
            let f=px-this.platForm.x
            this.platForm.setVelocityX(f)
            this.platForm.x=px

5 .停掉之前的动画

扩展1

1 .人物加血条
2 .加命:1
3 .跳台会移动
4 .跳台随机会消失,这个比较简单:左右移动.
5 .星星加变大变小的动画
6 .子弹加粒子跟随动画,拖尾效果
7 .注意,这些例子很多的灵感都是看着另一个物理引擎里面的演示demo想到的.
8 .横版闯关

下一步

1 .大范围的UI怎么写
2 .

横版动画

1 .无限视觉。视差滚动怎么做
2 .

import Phaser from 'phaser';

class MyGame extends Phaser.Scene
{
    constructor ()
    {
        super();
        this.count=-1
        this.platForm=null
        this.cursors=null
        this.box=null
    }

    preload ()
    {
        this.load.image('platform', 'http://10.226.101.164:8081/sprites/platform.png');
        this.load.image('box', 'http://10.226.101.164:8081/sprites/box.png');
    }
      
    create ()
    {
        this.platForm=this.matter.add.image(400,350,'platform',null,{
            isStatic:true,
            restitution:0.4
        })

       this.box=this.matter.add.image(400,200,'box',null,{
            friction:1,
            frictionStatic:Infinity,
            slop:0.5
        })

        this.cursors=this.input.keyboard.createCursorKeys()
        console.log(this.platForm)
    }
    update(){
            this.count+=0.014

            const px=400+100*Math.sin(this.count)
            let f=px-this.platForm.x
            this.platForm.setVelocityX(f)
            this.platForm.x=px

            // 添加物体受力
            if(this.cursors.up.isDown){
                this.box.setVelocityY(-1.5)
            }

    }
}

var config = {
    type: Phaser.AUTO,
    width: 800,
    height: 600,
    backgroundColor: '#1b1464',
    parent: 'phaser-example',
    physics: {
        default: 'matter',
        matter: {
           
        }
    },
    scene: MyGame
};

const game = new Phaser.Game(config);

上一篇 下一篇

猜你喜欢

热点阅读