极致21点开发DAY4
完成的内容:1.修改上一篇博文中的Bug 2.完成任务窗口逻辑
using System;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI; public class ActionController : MonoBehaviour
{
public Button closeBtn;
public Button recvBtn;
public Sprite[] goldSprite = new Sprite[];
public Sprite recvSprite; public Transform parent;
private List<GameObject> itemList = new List<GameObject>();
//今天点击日期
private string currentClickDate = string.Empty;
//上一次点击日期
private string lastClickDate = string.Empty;
//已领取金币的天数
private int recvCount;
/// private int totalRecvCount = 0;
////是否已重置recvCount
//private int resetRecvCount = -1; // 0表示没有重置,其他值表示已重置
////是否从未领取金币 非 0领取过,其他值表示未领取过
private int hasRecv = ;
private void Start()
{
PlayerPrefs.DeleteAll();
Init();
//获取当前日期
currentClickDate = DateTime.Today.ToLongDateString();
//currentClickDate = "2019年1月9日"; Debug.Log(currentClickDate);
Debug.Log(lastClickDate);
Debug.Log(recvCount.ToString());
LoadActionItems(); } private void Init()
{ closeBtn.onClick.AddListener(OnCloseBtn);
recvBtn.onClick.AddListener(OnRecvBtn); lastClickDate = PlayerPrefs.GetString("LastClickDate");
recvCount = PlayerPrefs.GetInt("RecvCount"); //空返回null
hasRecv = PlayerPrefs.GetInt("HasRecv");
//resetRecvCount = PlayerPrefs.GetInt("ResetRecvCount"); //空返回0
} private void OnCloseBtn()
{
gameObject.SetActive(false);
}
//如果上一次点击日期和今天日期不同,并且今天还没有点击,则更新UI。
private void OnRecvBtn()
{ //不是今天第一次点击,则什么都不做
if (lastClickDate.Equals(currentClickDate))
{
Debug.Log("今天的金币已领取");
return;
}
else
{
recvCount++;
//totalRecvCount++;
if (recvCount == itemList.Count)
{
recvCount = ;
//resetRecvCount = 1; //已重置领取天数标志
PlayerPrefs.SetInt("ResetRecvCount", );
} if(recvCount == )
{
itemList[itemList.Count - ].transform.GetChild().gameObject.SetActive(true);
}
else
{
//领取金币次数+1
itemList[recvCount - ].transform.GetChild().gameObject.SetActive(true); }
lastClickDate = currentClickDate;
PlayerPrefs.SetInt("RecvCount", recvCount);
//PlayerPrefs.SetInt("TotalRecvCount", totalRecvCount);
PlayerPrefs.SetString("LastClickDate", lastClickDate);
PlayerPrefs.SetInt("HasRecv", );
}
}
private void LoadActionItems()
{ ActionData temp = new ActionData();
for (int i = ; i < goldSprite.Length; i++)
{
//加载资源
UnityEngine.Object obj = Resources.Load("Prefabs/actionitem");
GameObject go = Instantiate(obj) as GameObject;
itemList.Add(go);
//初始化资源
go.transform.SetParent(parent);
go.transform.localPosition = new Vector3(, , );
go.transform.localScale = new Vector3(, , ); temp.day = "第" + (i + ) + "天";
temp.goldNum = (i + ).ToString();
temp.goldSprite = goldSprite[i];
temp.receiveSprite = recvSprite; go.GetComponent<ActionItem>().SetActionItem(temp);
}
//加载完资源时,更新之前已领取金币的UI
UpdateRecvInfo();
Debug.Log(recvCount);
} /// <summary>
/// 更新领取金币UI
/// </summary>
private void UpdateRecvInfo()
{
//如果从未领取过,则什么都不做
if(hasRecv == )
{
return;
}
//读取的recvCount值总是在0-6之间 // 如果recvCounmt = 0并且今天点击过,说明重置了recvCount,在显示时应该按实际天数显示。
if(lastClickDate.Equals(currentClickDate) && recvCount == )
{
//还原recvCount,但是不写入文件
recvCount = itemList.Count;
}
for (int i = ; i < recvCount; i++)
{
itemList[i].transform.GetChild().gameObject.SetActive(true); }
}
}
//数据持久化 TO DO
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
namespace PureMVCDemo
{
public class TaskController : MonoBehaviour
{
public GameObject taskItemPrefab;
public string[] names;
public Transform parent;
public int taskItemCount = ;
public Sprite receivedSprite;
public Sprite nonReceivedSprite;
public Button closeBtn;
private List<TaskItem> taskItemList = new List<TaskItem>(); private void Start()
{
closeBtn.onClick.AddListener(OnCloseBtn);
Init();
} private void OnCloseBtn()
{
this.gameObject.SetActive(false);
} private void Init()
{
for (int i = ; i < taskItemCount; i++)
{
GameObject go = Instantiate(taskItemPrefab);
go.transform.SetParent(parent);
go.transform.localScale = new Vector3(, , );
taskItemList.Add(go.GetComponent<TaskItem>());
UpdateTaskData(taskItemList[i], i);
}
}
private void UpdateTaskData(TaskItem taskItem, int nameIndex)
{
taskItem.nameText.text = names[nameIndex];
if(taskItem.hasReceived)
{
taskItem.recvImg.sprite = receivedSprite;
}
else
{
taskItem.recvImg.sprite = nonReceivedSprite;
} }
} }
任务系统的数据结构更加复杂,还有计时系统也比较困难,数据持久化还没处理,为了尽快完成游戏雏形,这些功能放在以后在做。
极致21点开发DAY4的更多相关文章
- 极致21点开发DAY2
今天完成的主要内容时MainScene场景中设置面板的开发.游戏逻辑:点击设置按钮,弹出音乐设置弹框,弹框内容包括音乐的打开与关闭,退出游戏. 点击退出游戏,弹出退出游戏确认面板.效果图: 1.首先在 ...
- 极致21点开发DAY1
最近在学习UI框架,无奈没有完整的项目学习,四处搜索找了这款游戏源码,在Unity2018上完美运行.于是乎开始学习开发这款游戏.今天主要完成的任务时拼UI.搭建了3个场景, StartScene, ...
- 极致21点开发DAY3
今天完成的主要任务是活动窗口的显示与关闭,以及领取金币的逻辑.用到了数据持久化技术.我想记录的主要是领取金币的逻辑. 领取金币算法:如果今天没有领取金币,即可领取,否则什么都不做. 一句话描述足矣,但 ...
- Sea.js提供简单、极致的模块化开发体验
为什么使用 Sea.js ? Sea.js 追求简单.自然的代码书写和组织方式,具有以下核心特性: 简单友好的模块定义规范:Sea.js 遵循 CMD 规范,可以像 Node.js 一般书写模块代码. ...
- Python全栈开发day4
1.python三元运算 实现方法: result = 值1 if 条件 else 值2 例如: 1 2 3 4 #!/bin/env python #-*- coding:utf-8 -*- nam ...
- python全栈开发-Day4 列表
python全栈开发-Day4 列表 一.首先按照以下几个点展开列表的学习 #一:基本使用 1 用途 2 定义方式 3 常用操作+内置的方法 #二:该类型总结 1 存一个值or存多个值 只能存一个值 ...
- 21:开发脚本管理服务端LVS案例
[root@lb03 scripts]# cat lv_manager.sh #!/bin/bash #定义只能是root用户执行 ];then echo "permission deny ...
- 21 javaweb开发--bug调试技巧
1.当修改代码后,测试时没有任何效果 解决方案:换个浏览器试试,可能是浏览器缓存的原因.
- IOS开发基础知识碎片-导航
1:IOS开发基础知识--碎片1 a:NSString与NSInteger的互换 b:Objective-c中集合里面不能存放基础类型,比如int string float等,只能把它们转化成对象才可 ...
随机推荐
- JavaScript中作用域和作用域链的简单理解(变量提升)
通过阅读<JS高级程序设计>这本书,对js中的作用域和作用域链知识有了初步的了解和认识,准备成笔记供大家参考,笔记中字数比较多,但个人认为叙述的挺详细的,所以希望读者耐心看.再者,本人了解 ...
- java 解析富文本处理 img 标签
很多项目都需要到富文本来添加内容,就好比新闻啊,旅游景点之类的,都需要使用富文本去添加数据,然而怎么我这边就发现了两个问题 1)怎样将富文本的图片的 src 获取出来? 2)后台上传的时候用的是相对路 ...
- 英语口语练习系列-C39-舞蹈-谈论昨天的活动
词汇-舞蹈(dancing) ballet body shaking sway the body have a good figure special training arm movement da ...
- Linux 新手应该知道的 26 个命令
https://linux.cn/article-6160-1.html 当你进入了 Linux 的世界,在下载.安装 了某个 Linux 发行版,体验了 Linux 桌面并安装了一些你喜爱和需要的软 ...
- C# Winform控件 - Form
一.Form窗体样式 1.FormBorderStyle (1)None (2)FixedSingle (3)Fixed3D 个人感觉跟Fixedsingle区别不大 (4)FixedDialog 不 ...
- JS基础学习3
1.控制语句 (1)if控制语句 if-else基本格式 if (表达式){ 语句1; ...... }else{ 语句2; ..... } 功能说明 如果表达式的值为true则执行语句1, 否则执行 ...
- amoeba实现读写分离
amoeba的运行环境依靠java的jdk: 下面执行amoeba的安装不走 # mkdir /usr/local/src/amoeba 上传文件:amoeba-mysql-binary-2.2.0. ...
- Windows系统IntelliJ IDEA安装配置
IntelliJ IDEA安装 IntelliJ IDEA,是java编程语言开发的集成环境,业界公认的最好的Java开发IDE之一.打开IDEA官方网站https://www.jetbrains.c ...
- postgresql----JOIN之多表查询
JOIN用于多张表的关联查询,如SELECT子句(SELECT A.a,A.b,B.a,B.d)中既有表A的字段,同时还有B表的字段,此时使用单独使用FROM A或FROM B已经解决不了问题了,使用 ...
- IOS不支持iframe的解决办法
最近做ios的兼容,因为入口不同,需要把公共页面抽取出来,然后根据不同的值,传递给后台不同的入口.刚开始用iframe页面嵌套(第一次尝试使用),但发现iOS系统对iframe嵌套页面的高度和定位控制 ...