当前位置: 首页 > 面试题库 >

精灵的对角运动

柯书
2023-03-14
问题内容

如何实现对精灵的对角线运动?我创建了一个可移动的精灵(一个矩形),它可以在四个方向上移动。

为了给矩形设置动画,使用了一个计时器对象和执行动作的方法。我在keyPressed和keyReleased方法中实现了以下代码,以使其在四个方向上移动。

public void keyPressed(KeyEvent arg0){
    int c=arg0.getKeyCode();
    if(c==KeyEvent.VK_LEFT){
        velx=-4;
        vely=0;
    }
    else if(c==KeyEvent.VK_RIGHT){
        velx=4;
        vely=0;
    }
    else if(c==KeyEvent.VK_UP){
        velx=0;
        vely=-4;
    }
    else if(c==KeyEvent.VK_DOWN){
        velx=0;
        vely=4;
    }
}

public void keyReleased(KeyEvent arg0){
    velx=0;
    vely=0;
}

问题答案:

这是基于您的最后评论的代码:

// Set of currently pressed keys
private final Set<Integer> pressed = new TreeSet<Integer>();

@Override
public void keyPressed(KeyEvent arg0) {
    int c = arg0.getKeyCode();
    pressed.add(c);
    if (pressed.size() > 1) {
        Integer[] array = pressed.toArray(new Integer[] {});
        if (array[0] == KeyEvent.VK_LEFT && array[1] == KeyEvent.VK_UP) {
            velx = -4;
            vely = -4;
        } else if (array[0] == KeyEvent.VK_UP && array[1] == KeyEvent.VK_RIGHT) {
            velx = 4;
            vely = 4;
        } else if (array[0] == KeyEvent.VK_RIGHT && array[1] == KeyEvent.VK_DOWN) {
            velx = 4;
            vely = -4;
        } else if (array[0] == KeyEvent.VK_LEFT && array[1] == KeyEvent.VK_DOWN) {
            velx = -4;
            vely = 4;
        }
    } else {
        if (c == KeyEvent.VK_LEFT) {
            velx = -4;
            vely = 0;
        } else if (c == KeyEvent.VK_RIGHT) {
            velx = 4;
            vely = 0;
        } else if (c == KeyEvent.VK_UP) {
            velx = 0;
            vely = -4;
        } else if (c == KeyEvent.VK_DOWN) {
            velx = 0;
            vely = 4;
        }
    }

}

@Override
public void keyReleased(KeyEvent arg0) {
    velx = 0;
    vely = 0;

    pressed.remove(Integer.valueOf(arg0.getKeyCode()));
}


 类似资料:
  • 我正在用Python pygame制作一个游戏,并制作了一个移动的背景,一个作为玩家的跳跃精灵和生成障碍物。现在我正在研究玩家和障碍物之间的碰撞,并编写了一些代码,但最终出现了错误: 我不知道,为什么那个类不是精灵,也不知道如何把它变成精灵。我希望修复这个错误后,碰撞工程。 播放器图像1 图像 2 背景图片3

  • 父类:BK.Node 精灵类 成员变量 变量 类型 名称 备注 size Object 大小 anchor Object 锚点 cornerRadius number 圆角 单位为像素 例子: var babaTex =new BK.Texture('GameRes://texture/test.png'); var sp =new BK.Sprite(200,200,babaTex,0,1,1

  • 我在PyGame中创建了两个简单的精灵,其中一个是雨伞,另一个是雨滴。雨滴被添加到一个名为< code>all_sprites的sprite组中。伞精灵有自己的组,名为< code>Umbrella_sprite 雨滴从屏幕顶部“落下”,如果其中一个碰到雨伞/与雨伞碰撞..雨滴应该被删除了。但是除了特定雨滴之外,所有其他雨滴都受此影响。

  • Pixi 精灵 现在你就有了一个画布,可以开始往上面放图像了。所有你想在画布上显示的东西必须被加进一个被称作 舞台的Pixi对象中。你能够像这样使用舞台对象: app.stage 这个舞台是一个Pixi 容器对象。你能把它理解成一种将放进去的东西分组并存储的空箱子。 舞台对象是在你的场景中所有可见对象的根容器。所有你放进去的东西都会被渲染到canvas中。现在舞台是空的,但是很快我们就会放进去一点

  • 精灵是一个总是面朝着摄像机的平面,通常含有使用一个半透明的纹理。 精灵不会投射任何阴影,即使设置了 castShadow = true也将不会有任何效果。 代码示例 const map = new THREE.TextureLoader().load( "sprite.png" ); const material = new THREE.SpriteMaterial( { map: map } )

  • 移动精灵 现在你知道了如何展示精灵,但是让它们移动呢?很简单:使用Pixi的ticker。这被称为 游戏循环 。任何在游戏循环里的代码都会1秒更新60次。你可以用下面的代码让 cat 精灵以每帧1像素的速率移动。 function setup() { //Start the game loop by adding the `gameLoop` function to //Pixi's `t