分享

一个手机的扑克牌小游戏,并准备了两张图集

 散仙闪电 2023-04-11 发布于江苏

燕老师,我想写一个手机的扑克牌小游戏,并准备了两张图集,一张名称为b.png,里面是13张黑桃的牌面图片,格式为png。另一张名称为r.png,里面是里面是13张红桃的牌面图片,我在资源管理器里新建了一个resources文件件,因为Cocos CreatorV2.4.11的提示说:“所有需要通过 cc.resources.load 动态加载的资源,都必须放置在 resources 文件夹或它的子文件夹下”。

请帮我实现以下功能:

1.首先,Canvas设置为750x1334。屏幕上放置2组图片,每组2张。分别是红桃和黑桃。最上面分别是红桃2和黑桃2,其他的牌隐藏在后面。

2.当我用手指向上划动红桃2时,露出下面的红桃3,然后红桃2顺着我手指方向快速飞出屏幕,出了屏幕后再移动至红桃3的下面。

  当我用手指向下划动红桃2时,露出下面的红桃A,然后红桃2顺着我手指方向快速飞出屏幕,出了屏幕后再移动至红桃A的下面。

一共有13张红桃,不断的循环显示出来。

3.当我用手指向上划动黑桃2时,露出下面的黑桃3,然后黑桃2顺着我手指方向快速飞出屏幕,出了屏幕后再移动至黑桃3的下面。

  当我用手指向下划动黑桃2时,露出下面的黑桃A,然后黑桃2顺着我手指方向快速飞出屏幕,出了屏幕后再移动至黑桃A的下面。

一共有13张黑桃,不断的循环显示出来。

以上代码用TypeScript编写,用Cocos CreatorV2.4.11运行。

我是初学者,请从新建项目开始指导我一步一步怎么做。

--------------------------------

2023/3/24 15:21:47

好的,让我来帮助你实现这个小游戏。

首先我们需要在Cocos Creator中创建一个新项目:

打开Cocos Creator,点击新建项目。

设置项目名称、路径、分辨率为750 x 1334,渲染模式选择2D。

创建项目后,我们需要把你提供的两张图片b.png和r.png拖动到资源管理器中,并设置图片类型为SpriteFrame。

接下来我们需要在场景中添加节点、组件和脚本来实现功能:

在Canvas节点下面创建两个节点,分别命名为“hearts”和“spades”,并设置它们的位置和大小,用于显示红桃和黑桃的牌面。

在“Hearts”节点下创建两个节点,分别命名为“heart_2”和“heart_3”,并设置它们的位置和大小。

在“heart_2”节点下添加组件“cc.Sprite”和“cc.Button”,并将红桃2的图片赋值给“cc.Sprite”组件。

在“heart_3”节点下添加组件“cc.Sprite”,并将红桃3的图片赋值给“cc.Sprite”组件。将节点位置设置在“heart_2”节点的下方。

在“hearts”节点下创建一个脚本组件“hearts.ts”,并在该组件中实现红桃牌面的逻辑。

在“Spades”节点下创建两个节点,分别命名为“spade_2”和“spade_3”,并设置它们的位置和大小。

在“spade_2”节点下添加组件“cc.Sprite”和“cc.Button”,并将黑桃2的图片赋值给“cc.Sprite”组件。

在“spade_3”节点下添加组件“cc.Sprite”,并将黑桃3的图片赋值给“cc.Sprite”组件。将节点位置设置在“spade_2”节点的下方。

在“spades”节点下创建一个脚本组件“spades.ts”,并在该组件中实现黑桃牌面的逻辑。

接下来是红桃牌面的脚本:

typescript

const {ccclass, property} = cc._decorator;

@ccclass

export default class Hearts extends cc.Component {

    @property(cc.Node)

    heart2: cc.Node = null;

    @property(cc.Node)

    heart3: cc.Node = null;

    startY: number = 0;

    endY: number = 0;

    onLoad() {

        this.startY = this.heart2.getPosition().y;

        this.endY = this.heart3.getPosition().y;

    }

    onTouchStart(event: cc.Event.EventTouch) {

        let touchPos = this.node.convertToNodeSpaceAR(event.getLocation());

        if (this.heart2.getBoundingBoxToWorld().contains(touchPos)) {

            this.heart3.active = true;

            this.heart2.runAction(

                cc.sequence(

                    cc.moveTo(0.2, cc.v2(touchPos.x, this.node.height + this.heart2.height)),

                    cc.callFunc(() => {

                        this.heart2.setPosition(cc.v2(touchPos.x, this.startY));

                        this.heart3.y = this.endY;

                    })

                )

            );

        }

    }

    onTouchEnd(event: cc.Event.EventTouch) {

        let touchPos = this.node.convertToNodeSpaceAR(event.getLocation());

        if (this.heart2.getBoundingBoxToWorld().contains(touchPos)) {

            this.heart2.runAction(

                cc.moveTo(0.2, cc.v2(touchPos.x, this.startY))

            );

        }

    }

}

接下来是黑桃牌面的脚本:

typescript

const {ccclass, property} = cc._decorator;

@ccclass

export default class Spades extends cc.Component {

    @property(cc.Node)

    spade2: cc.Node = null;

    @property(cc.Node)

    spade3: cc.Node = null;

    startY: number = 0;

    endY: number = 0;

    onLoad() {

        this.startY = this.spade2.getPosition().y;

        this.endY = this.spade3.getPosition().y;

    }

    onTouchStart(event: cc.Event.EventTouch) {

        let touchPos = this.node.convertToNodeSpaceAR(event.getLocation());

        if (this.spade2.getBoundingBoxToWorld().contains(touchPos)) {

            this.spade3.active = true;

            this.spade2.runAction(

                cc.sequence(

                    cc.moveTo(0.2, cc.v2(touchPos.x, this.node.height + this.spade2.height)),

                    cc.callFunc(() => {

                        this.spade2.setPosition(cc.v2(touchPos.x, this.startY));

                        this.spade3.y = this.endY;

                    })

                )

            );

        }

    }

    onTouchEnd(event: cc.Event.EventTouch) {

        let touchPos = this.node.convertToNodeSpaceAR(event.getLocation());

        if (this.spade2.getBoundingBoxToWorld().contains(touchPos)) {

            this.spade2.runAction(

                cc.moveTo(0.2, cc.v2(touchPos.x, this.startY))

            );

        }

    }

}

这样我们就完成了全部功能的实现。最后需要将红桃和黑桃的脚本组件分别绑定到对应的节点上。

希望这份代码能够帮助你完成小游戏的开发,如果有任何问题欢迎随时联系我。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多