小游戏02—《直升机》

接下来我们布置场景,我们的预期结果(功能分析)是:

        游戏中中的直升机按E键螺旋桨加速,加速至800直升机向上飞行,达到2000转速不再加速,直升机向上飞行10m向前飞,向前飞10米向下飞并且螺旋桨减速。螺旋桨减速至0再次起飞,并且螺旋桨不再旋转。

首先进入资源商店准备下载直升机模型资源,

搜索helicopter,

将免费资源导入unity包,

将导入资源完全解压缩 以让我们进行修改,

解开预制体之后,创建一个地面Plane,

设置其大小,

设置地面颜色(可不做)

创建脚本文件夹,

创建脚本,

命名为Fly

双击打开脚本编写代码:

using UnityEngine;
public class Fly : MonoBehaviour{
    public float speed = 2f;//向上的位移速度
    //每一帧被调用一次
    void Update(){
        if (transform.position.z > 10f)
            FlyDown();
        else if (transform.position.y < 10)
            FlyUp();
        else
            FlyForWard();
    }
    //向上飞
    void FlyUp(){
        transform.Translate(Vector3.up * speed * Time.deltaTime);
    }
    //向前飞
    void FlyForWard(){
        transform.Translate(Vector3.forward * speed * Time.deltaTime);
    }
    //向下飞
    void FlyDown(){
        if (transform.position.y > 0)
            transform.Translate(Vector3.down * speed * Time.deltaTime);
    }
}
 

编写好代码 ctrl + s 保存,将Fly.cs代码绑定在 飞机物体上,并修改飞机名字为Helicopter,

 点击 Main Camera 按住ctrl + shift + f 可调整运行视角 与 编辑视角 一致,

运行即按照代码要求自动飞行,

但飞行并不真实,直升机的螺旋桨没有旋转,

修改Fly.cs:

using UnityEngine;
public class Fly : MonoBehaviour{
    public GameObject mainRotorObj;//主螺旋桨物体
    public GameObject tailRotorObj;//尾部螺旋桨
    public float rotSpeed;//旋转速度
    public bool isOnOff = false;//是否开关引擎
    public float rotAcceleration;//旋转加速度
    //定义枚举类型
    public enum Status{
        ZeroEngine,//停机状态
        RunEngine,//启动状态
        TakeOff,//起飞状态
        FlyForward,//平飞状态
        Landing//降落状态
    }
    Status status;//直升机状态
    void Start(){
        if (mainRotorObj == null || tailRotorObj == null)
            Debug.LogError("部分子物体没有拽入参数栏");
    }
    void Update(){
        //开关语句进行状态分支,引入枚举变量
        if (status == Status.ZeroEngine)
            rotAcceleration = -1f;
        else if (status == Status.RunEngine)
            rotAcceleration = 1f;
        else if (status == Status.TakeOff)
            transform.Translate(Vector3.up * 2f * Time.deltaTime);
        else if (status == Status.FlyForward)
            transform.Translate(Vector3.forward * 2f * Time.deltaTime);
        else if (status == Status.Landing){
            if (transform.position.y > 0)
                transform.Translate(Vector3.down * 2f * Time.deltaTime);
            rotAcceleration = -0.5f;
        }
        if (Input.GetKeyUp(KeyCode.E))
            isOnOff = !isOnOff;
        if (isOnOff)
            status = Status.RunEngine;
        else
            status = Status.ZeroEngine;
        if (rotSpeed < 0)
            rotSpeed = 0;
        if (rotSpeed > 2000f)
            rotSpeed = 2000;
        //螺旋桨公共代码
        rotSpeed += rotAcceleration;
        mainRotorObj.transform.Rotate(Vector3.up * rotSpeed * Time.deltaTime);
        tailRotorObj.transform.Rotate(Vector3.up * rotSpeed * Time.deltaTime);
        if (rotSpeed > 800)
            status = Status.TakeOff;
        if (transform.position.y > 10f)
            status = Status.FlyForward;
        if (transform.position.x > 20f)
            status = Status.Landing;
        if (rotSpeed == -0.5)
            status = Status.TakeOff;
        if (status == Status.TakeOff)
            rotSpeed += 0.5f;
    }
}

将主螺旋桨与尾螺旋桨绑定在代码框选上,

运行项目 按 键盘E键 即可按照要求飞行,

End.

  • 27
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个简单的JAVA直升机小游戏的实现示例: ```java import java.awt.*; import java.awt.event.*; import java.awt.geom.*; import javax.swing.*; public class HelicopterGame extends JFrame implements ActionListener, KeyListener { private Timer timer; private int x = 50; private int y = 300; private int dy = 0; private int score = 0; private int highScore = 0; private boolean gameOver = false; private boolean upPressed = false; public HelicopterGame() { super("Helicopter Game"); setSize(500, 500); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); timer = new Timer(10, this); timer.start(); addKeyListener(this); setFocusable(true); setFocusTraversalKeysEnabled(false); } public void actionPerformed(ActionEvent e) { if (!gameOver) { dy += 1; y += dy; if (upPressed) { dy = -10; } if (y > 450) { gameOver = true; } score++; if (score > highScore) { highScore = score; } } repaint(); } public void keyPressed(KeyEvent e) { if (e.getKeyCode() == KeyEvent.VK_UP) { upPressed = true; } } public void keyReleased(KeyEvent e) { if (e.getKeyCode() == KeyEvent.VK_UP) { upPressed = false; } } public void keyTyped(KeyEvent e) {} public void paint(Graphics g) { super.paint(g); Graphics2D g2d = (Graphics2D) g; g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); g2d.setColor(Color.BLUE); g2d.fill(new Ellipse2D.Double(x, y, 30, 15)); g2d.setColor(Color.BLACK); g2d.drawString("Score: " + score, 10, 20); g2d.drawString("High Score: " + highScore, 10, 35); if (gameOver) { g2d.drawString("Game Over", 200, 250); } } public static void main(String[] args) { HelicopterGame game = new HelicopterGame(); game.setVisible(true); } } ``` 这个游戏中,玩家需要控制一架直升机飞行,避免撞到屏幕底部或障碍物。按下上箭头键可以使直升机上升,松开上箭头键则会下降。游戏会记录玩家的得分,并且在游戏结束时显示最高得分和“游戏结束”字样。 注意,这只是一个简单的示例,游戏的实现方式可以根据需求进行更改和扩展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值