javafx processing p5js swing pygame 游戏

javafx processing p5js swing pygame 游戏

运行视频

什么游戏?不如自己做一个!

设计说明

1.游戏设置与配置:

游戏定义了宽度和高度,分别为720像素。
使用了Processing库,通常用于创建交互式可视化应用程序。
settings() 方法设置了游戏窗口的初始大小。
setup() 方法负责初始化游戏,设置帧率,并初始化Hero角色。

2.加载图片:
loadAllImages() 方法加载了英雄角色在不同方向和动画下的图片。这些图片存储在Hero对象的不同列表中。
每个方向(左、右、上、下以及对角线)都有三帧动画。
图片被加载、调整大小,并添加到Hero对象的适当列表中。
处理用户输入:

3.keyPressed() 和 keyReleased() 方法处理用户键盘输入。
当按下方向键(左、右、上、下)时,英雄的方向和移动状态会更新。
特殊的对角方向(例如,LEFTUP)也被处理。
当释放方向键时,移动状态会更新,并且英雄的方向可能会更改为最接近的正交方向。
游戏循环:

4.draw() 方法是游戏循环的一部分,负责更新和渲染游戏元素。
它首先清除背景。
然后调用updateObject() 和 drawObject() 方法来更新和绘制英雄角色。
英雄角色(面向对象方法):

5.Hero 类用于封装英雄角色的属性和行为。
它包含了不同动画和方向的图片列表。
Hero 类内的update() 方法可能处理英雄位置和动画帧的逻辑。
Hero 类内的draw() 方法处理基于当前动画帧和方向来渲染英雄角色。

部分代码

import processing.core.PApplet;
import processing.core.PImage;

/**
 * TODO:可以加个过渡动画,但是抠图很麻烦,多个角色,应用在游戏不划算
 *
 */
public class 连续帧动作 extends PApplet {

    public int WIDTH = 720;
    public int HEIGHT = 720;


    int currentFrameIndex = 0;


    int heroX = 200;
    int heroY = 100;
    int heroSpeed = 5; // 移动速度


    Hero hero = new Hero();


    @Override
    public void settings() {
        size(WIDTH, HEIGHT);
    }

    @Override
    public void setup() {
        frameRate(60);
        //设置游戏主程序配置
        GameConfig.pApplet = this;
        //创建对象
        hero = new Hero();
        //加载所有图片
        loadAllImages();



    }

    /**
     * 加载所有图片
     * * 图片加载不能用这种方式 会报错
     * *  GameConfig.pApplet.loadImage("heroRight.png");
     */
    private void loadAllImages() {

        //加载英雄图片
        PImage heroLeft = loadImage("image/heroLeft.png");

        for (int i = 0; i < 3; i++) {
            PImage image = heroLeft.get(i * 200, 0, 200, 190);
            image.resize(hero.heroSize, hero.heroSize);
            hero.heroLeftImages.add(image);
        }


        PImage heroRight = loadImage("image/heroRight.png");

        for (int i = 0; i < 3; i++) {
            PImage image = heroRight.get(i * 200, 0, 200, 190);
            image.resize(hero.heroSize, hero.heroSize);
            hero.heroRightImages.add(image);
        }


        PImage heroUp = loadImage("image/heroUp.png");

        for (int i = 0; i < 3; i++) {
            PImage image = heroUp.get(i * 200, 0, 200, 190);
            image.resize(hero.heroSize, hero.heroSize);
            hero.heroUpImages.add(image);
        }

        PImage heroLeftUp = loadImage("image/heroLeftUp.png");

        for (int i = 0; i < 3; i++) {
            PImage image = heroLeftUp.get(i * 200, 0, 200, 190);
            image.resize(hero.heroSize, hero.heroSize);
            hero.heroLeftUpImages.add(image);
        }

        PImage heroRightUp = loadImage("image/heroRightUp.png");

        for (int i = 0; i < 3; i++) {
            PImage image = heroRightUp.get(i * 200, 0, 200, 190);
            image.resize(hero.heroSize, hero.heroSize);
            hero.heroRightUpImages.add(image);
        }


        PImage heroDown = loadImage("image/heroDown.png");

        for (int i = 0; i < 3; i++) {
            PImage image = heroDown.get(i * 200, 0, 200, 190);
            image.resize(hero.heroSize, hero.heroSize);
            hero.heroDownImages.add(image);
        }
        PImage heroLeftDown = loadImage("image/heroLeftDown.png");

        for (int i = 0; i < 3; i++) {
            PImage image = heroLeftDown.get(i * 200, 0, 200, 190);
            image.resize(hero.heroSize, hero.heroSize);
            hero.heroLeftDownImages.add(image);
        }

        PImage heroRightDown = loadImage("image/heroRightDown.png");

        for (int i = 0; i < 3; i++) {
            PImage image = heroRightDown.get(i * 200, 0, 200, 190);
            image.resize(hero.heroSize, hero.heroSize);
            hero.heroRightDownImages.add(image);
        }
    }

    @Override
    public void keyPressed() {


        if (keyCode == LEFT) {
            hero.direction = GameEnum.DirectionEnum.LEFT;
            hero.leftMoveStatus =true;
        }
        if (keyCode == RIGHT) {
            hero.direction = GameEnum.DirectionEnum.RIGHT;
            hero.rightMoveStatus =true;
        }
        if (keyCode == UP) {
            hero.direction = GameEnum.DirectionEnum.UP;
            hero.upMoveStatus =true;
        }
        if (keyCode == DOWN) {
            hero.direction = GameEnum.DirectionEnum.DOWN;
            hero.downMoveStatus =true;
        }

        if(hero.upMoveStatus&&hero.leftMoveStatus){
            hero.direction = GameEnum.DirectionEnum.LEFTUP;
        }



        if(hero.upMoveStatus&&hero.rightMoveStatus){
            hero.direction = GameEnum.DirectionEnum.RIGHTUP;
        }

        if(hero.downMoveStatus&&hero.leftMoveStatus){
            hero.direction = GameEnum.DirectionEnum.LEFTDOWN;
        }


        if(hero.downMoveStatus&&hero.rightMoveStatus){
            hero.direction = GameEnum.DirectionEnum.RIGHTDOWN;
        }



//        System.out.println(keyCode == UP && keyCode == RIGHT);


    }

    //本来就可以检测多个按键,但是要存储多种状态
    @Override
    public void keyReleased() {
        if (keyCode == LEFT) {
            hero.leftMoveStatus =false;

            if( hero.direction == GameEnum.DirectionEnum.LEFTUP){
                hero.direction = GameEnum.DirectionEnum.UP;
            }

            if( hero.direction == GameEnum.DirectionEnum.LEFTDOWN){
                hero.direction = GameEnum.DirectionEnum.DOWN;
            }

        }
        if (keyCode == RIGHT) {
            hero.rightMoveStatus =false;

            if( hero.direction == GameEnum.DirectionEnum.RIGHTUP){
                hero.direction = GameEnum.DirectionEnum.UP;
            }

            if( hero.direction == GameEnum.DirectionEnum.RIGHTDOWN){
                hero.direction = GameEnum.DirectionEnum.DOWN;
            }
        }
        if (keyCode == UP) {
            hero.upMoveStatus =false;
            if( hero.direction == GameEnum.DirectionEnum.LEFTUP){
                hero.direction = GameEnum.DirectionEnum.LEFT;
            }

            if( hero.direction == GameEnum.DirectionEnum.RIGHTUP){
                hero.direction = GameEnum.DirectionEnum.RIGHT;
            }
        }
        if (keyCode == DOWN) {
            hero.downMoveStatus =false;
            if( hero.direction == GameEnum.DirectionEnum.LEFTDOWN){
                hero.direction = GameEnum.DirectionEnum.LEFT;
            }

            if( hero.direction == GameEnum.DirectionEnum.RIGHTDOWN){
                hero.direction = GameEnum.DirectionEnum.RIGHT;
            }
        }


    }

    @Override
    public void draw() {
        background(255);

        //更新角色参数
        updateObject();
        //绘制角色
        drawObject();




    }

    private void updateObject() {
        hero.update();
    }

    private void drawObject() {
        hero.draw();
    }

    public static void main(String[] args) {
        PApplet.main("连续帧动作");
    }
}

相关图片

请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

厉掣

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值