完成的内容: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的更多相关文章

  1. 极致21点开发DAY2

    今天完成的主要内容时MainScene场景中设置面板的开发.游戏逻辑:点击设置按钮,弹出音乐设置弹框,弹框内容包括音乐的打开与关闭,退出游戏. 点击退出游戏,弹出退出游戏确认面板.效果图: 1.首先在 ...

  2. 极致21点开发DAY1

    最近在学习UI框架,无奈没有完整的项目学习,四处搜索找了这款游戏源码,在Unity2018上完美运行.于是乎开始学习开发这款游戏.今天主要完成的任务时拼UI.搭建了3个场景, StartScene, ...

  3. 极致21点开发DAY3

    今天完成的主要任务是活动窗口的显示与关闭,以及领取金币的逻辑.用到了数据持久化技术.我想记录的主要是领取金币的逻辑. 领取金币算法:如果今天没有领取金币,即可领取,否则什么都不做. 一句话描述足矣,但 ...

  4. Sea.js提供简单、极致的模块化开发体验

    为什么使用 Sea.js ? Sea.js 追求简单.自然的代码书写和组织方式,具有以下核心特性: 简单友好的模块定义规范:Sea.js 遵循 CMD 规范,可以像 Node.js 一般书写模块代码. ...

  5. Python全栈开发day4

    1.python三元运算 实现方法: result = 值1 if 条件 else 值2 例如: 1 2 3 4 #!/bin/env python #-*- coding:utf-8 -*- nam ...

  6. python全栈开发-Day4 列表

    python全栈开发-Day4 列表 一.首先按照以下几个点展开列表的学习 #一:基本使用 1 用途 2 定义方式 3 常用操作+内置的方法 #二:该类型总结 1 存一个值or存多个值 只能存一个值 ...

  7. 21:开发脚本管理服务端LVS案例

    [root@lb03 scripts]# cat lv_manager.sh #!/bin/bash #定义只能是root用户执行 ];then echo "permission deny ...

  8. 21 javaweb开发--bug调试技巧

    1.当修改代码后,测试时没有任何效果 解决方案:换个浏览器试试,可能是浏览器缓存的原因.

  9. IOS开发基础知识碎片-导航

    1:IOS开发基础知识--碎片1 a:NSString与NSInteger的互换 b:Objective-c中集合里面不能存放基础类型,比如int string float等,只能把它们转化成对象才可 ...

随机推荐

  1. 面试中遇到的原生js题总结

    最近面试,遇到很多js相关的面试题,总结一下. 1.js 去重 1) indexOf Array.prototype.unique = function(){ var result = []; var ...

  2. 认识vim 编辑器

    vim编辑器 vim编辑器的重点是光标的移动,模式切换,删除,查找,替换,复制,撤销命令的使用. vim 有三种模式: 命令模式,编辑模式,末行模式 vim打开方式: 语法: vim 文件路径 vim ...

  3. (65)Wangdao.com第十天_JavaScript 垃圾回收机制 GC

    垃圾积累过多,致使程序运行缓慢,什么是垃圾? 当堆中某个内容,再也没有指针指向它,我们将再也用不了它,此时就是一个垃圾. 出现这种情况是因为 obj = null; 此时,js 中的垃圾回收机制会自动 ...

  4. [LeetCode] Bricks Falling When Hit 碰撞时砖头掉落

    We have a grid of 1s and 0s; the 1s in a cell represent bricks.  A brick will not drop if and only i ...

  5. Linux 定时任务调度(crontab命令)

    crond 是Linux下用周期性的执行某种任务或者等待处理某些事件的一个守护进程,crond 进程会每分钟定期检查是否有要执行的任务,如果有要执行的任务则自动执行该任务 Linux 下的任务调度 系 ...

  6. HTTP &RFC

    HTTP 1,HTTP所表达的控制以及描述性相关的信息都包含在了HTTP的起始行和首部之中.BNF的使用使得自己能够清晰的梳理出起始行和首部中所有类别的元信息.对于每一类的元信息具体包含哪些内容也能够 ...

  7. swust oj 972

    统计利用先序遍历创建的二叉树的宽度 1000(ms) 10000(kb) 2938 / 6810 利用先序递归遍历算法创建二叉树并计算该二叉树的宽度.先序递归遍历建立二叉树的方法为:按照先序递归遍历的 ...

  8. HTML列表与表格

    border:控制边框 width:宽度 height:高度 table是表格 tr:行 td:列★ colspan:合并列★rowspan:合并行★ <!doctype html> &l ...

  9. laravel的日志权限

    命令行脚本运行时报错 UnexpectedValueException  : The stream or file "/Data/PMS/storage/logs/laravel-2019- ...

  10. Vue.js的简介

    vue.js简介 Vue.js读音 /vjuː/, 类似于 view   Vue.js是前端三大新框架:Angular.js.React.js.Vue.js之一,Vue.js目前的使用和关注程度在三大 ...