完成的内容: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. randint模块无法加载

    原因:把程序文件名命名为 random.py 导致 random.randint 加载的是这个文件的模块

  2. Sting、StringBuffer、StringBuilder

    (1)String是字符串常量,一旦创建之后不可更改:StringBuffer和StringBuilder是字符串变量,可以更改.String的不可变,所以适合作为Map的键. (2)StringBu ...

  3. img标签与span一起使用不在同一条线上

    布局时 img标签与span标签在同一行是不能垂直,解决办法:在 img标签添加一个 vertical-align:middle; 即 <!-- img与span的文字与图片保持同一条水平线 在 ...

  4. Jmeter学习系列----2 录制脚本

    虽然专业的自动化测试人员都不会选择录制脚本的方式来进行自动化脚本的编写,但是,我们作为初学者还是可以学习一下怎么利用工具来进行脚本的录制,体验一下自动化工具的效率,下面,具体讲下如何使用jmeter自 ...

  5. ie下js不执行的几种可能

    1.首先考虑的就是代码是否有报错2.其次搜索代码中是否有console.log等测试的代码3.检查所用的方法是否兼容ie 以上是鄙人在开发过程中遇到的几种情况,抛砖来引玉~~

  6. ECMA Script 6_数值的扩展

    1. 二进制 和 八进制 新的表示法 前缀 0b(或0B) 表示 二进制 前缀 0o(或 0O )表示 八进制 console.log(0b111110111 === 503); // true co ...

  7. AWS Nginx Started but not Serving AWS上Nginx服务器无法正常工作

    After install the Nginx on AWS instance, and visit your public ip address, you might see the followi ...

  8. 纯js自动批量引入js、css插件,支持自定义参数

    //autoload.js ;! function(e) { var autoload = e.autoload || {}; e.autoload = autoload; e.autoload = ...

  9. js 中数组的遍历

    var x = ['a','b','c'] x.forEach(function(val,k){ console.log(val + '--' +k); }) a--0 b-- 1 c-- 2 var ...

  10. 【C++】链表回环检测

    //链表回环检测问题 #include<iostream> #include<cstdlib> using namespace std; ; struct node { int ...