
unity3d-学习笔记16-卡牌游戏制作(修复人物和boss血量的bug以及循环出牌的功能)
需要记录已经使用过的卡牌。 需要对已经使用过的卡牌进行洗牌。 需要确保卡牌不会重复使用。 在卡牌的初始化时,为每张卡牌添加一个标记,记录其是否被使用。 每次抽取卡牌时,筛选出标记为已使用的卡牌。 将这些卡牌收集到一个临时集合中。 对临时集合进行洗牌。 随机从洗好的卡牌中抽取一张进行展示。
实现2号、3号卡片的特殊功能。 添加战斗结束的判定和界面。 统一战斗界面到所有需要的事件中。 添加除战斗界面外的其他事件界面。
发布日期:2021-05-08 12:34:05
浏览次数:18
分类:精选文章
本文共 2023 字,大约阅读时间需要 6 分钟。
卡牌游戏制作(部分功能的优化)
问题一:修复血量异常
问题描述:
在游戏中发现,部分卡牌(如BOSS或特定角色)的血量在超过预设值后,仍然没有保持在预设值而是继续增加。这种现象会导致游戏异常,影响玩家体验。解决思路:
通过在代码中添加一个条件判断,当卡牌的血量超过预设值(如100)时,手动将血量归零。这种方法可以确保血量不会异常增长。代码示例:
if (bossLife > 100) { GameObject.Find("lifeNumber").GetComponent().text = "100";}
效果:
当血量超过预设值时,自动将血量重置为100,解决了异常问题。问题二:实现循环出牌功能
问题描述:
希望每15张为一组,卡牌能够循环出牌。现有卡牌集合中包含大量卡牌,需要实现每次抽取时自动选择未使用的卡牌并进行洗牌。问题分析:
解决思路:
具体实现:
// 收集已使用卡牌ListusedCards = new List ();foreach (Card card in CardDesktop.cardList) { if (card.isActive) { usedCards.Add(card); }}// 洗牌List shuffledCards = new List ();int count = usedCards.Count;int remaining = count;while (shuffledCards.Count < remaining) { int index = Random.Range(0, remaining - 1); Card card = usedCards[index]; if (!shuffledCards.Contains(card)) { shuffledCards.Add(card); usedCards.Remove(card); }}// 从洗好的卡牌中随机抽取List newDrawPiles = shuffledCards;// 例如,确定抽取数量(如2张或3张)if (newDrawPiles.Count < 2) { for (int i = 1; i <= newDrawPiles.Count; i++) { Card card = newDrawPiles[i - 1]; // 实例化卡牌并进行显示 GameObject go = Instantiate(Resources.Load("Card/Card" + GetCardId(card)), transform.position, transform.rotation); // 设置卡牌属性 go.transform.GetChild(0).GetComponent ().text = card.CardType; go.transform.GetChild(3).GetComponent ().text = card.CardName; // 等等 yield return new WaitForSeconds(0.3f); ButtonToNextRound.isNextRound = false; // 更新卡牌状态 int index = CardDesktop.cardList.FindIndex(c => c.Id == card.Id); CardDesktop.cardList[index].isActive = false; } }
效果:
实现了卡牌的循环使用,每15张为一组,卡牌不会重复使用,玩家每次抽取都会获得新的卡牌。总结
通过上述优化,解决了血量异常和卡牌循环使用的问题。对于萌新开发者而言,理解卡牌逻辑并实现循环功能是一个有趣且有挑战的任务。希望以上方法能为您的开发提供帮助!
接下来的任务:
发表评论
最新留言
很好
[***.229.124.182]2025年04月29日 16时37分51秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Lenovo E47A Ubuntu闪屏解决办法
2023-01-31
Leopard系统装好后不能从硬盘引导的朋友看过来
2023-01-31
Lepus搭建企业级数据库全方位监控系统
2023-01-31
LESS 中的变量有什么作用?如何声明和使用变量?
2023-01-31
Less 日常用法
2023-01-31
Lettuce 移动框架 for Romantic
2023-01-31
let、const、var的四点区别( 代码示例 )
2023-01-31
LexPredict法律词典项目教程
2023-01-31
LFS最终幻想
2023-01-31
lftp命令详解
2023-01-31
lib/libstdc++.so.6: version `GLIBCXX_3.4.30‘ not found (required by /lib/x86_64-linux-gnu/libLLVM-15
2023-01-31
Libevent 事件管理和添加事件
2023-01-31
libevent-简单的定时器
2023-01-31
libevent在windows下使用步骤详解
2023-01-31
libgdx的菜单配置,以及json文件的结构
2023-01-31
libiconv字符集转换库在C#中的使用
2023-01-31
liblognorm编译
2023-01-31
libmpg123 解码库用法
2023-01-31
Library Module上传Jcenter详解
2023-01-31