完成的内容: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. (三)ajax请求不同源之cors跨域

    一.基本原理 CORS是一个W3C标准,全称是"跨域资源共享"(Cross-origin resource sharing)它允许浏览器向跨源服务器,发出 XMLHttpReque ...

  2. [Python]Python中的浅复制与深复制

    看python的文档,发现list有copy方法,描述说效果同a[:]. 感觉有点惊讶,之前一直以为a[:]执行的是深复制. test了一下,发现确实如果a中存在可变对象,如list/set/dict ...

  3. echarts研究

    1.echarts是什么? 关键字:data visualization,canvas,chart Echarts是基于轻量级的canvas类库,纯javaScript实现,MVC封装,数据驱动,一款 ...

  4. XVIII Open Cup named after E.V. Pankratiev. Grand Prix of SPb

    A. Base $i - 1$ Notation 两个性质: $2=1100$ $122=0$ 利用这两条性质实现高精度加法即可. 时间复杂度$O(n)$. #include<stdio.h&g ...

  5. bzoj2982: combination(lucas定理板子)

    2982: combination Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 664  Solved: 397[Submit][Status][Di ...

  6. CSS 使用absolute 是<div>居中

    <style>        .col-center-block {            position: absolute;            top: 50%;         ...

  7. JS-预解析(提升)与代码执行过程

    1,预解析的过程. 2,代码的执行过程. 预解析:程序在执行过程,会先将代码读取到内存中检查,会将所有的声明在此处进行标记,所谓的标记就是让js解析器知道这个名字,后面在使用这个名字的时候,不会出现未 ...

  8. oo第二次总结

    第五次作业 度量分析 因为第五次作业是在第三次作业的基础上改的,所以出现了与第三次作业一样的问题,即圈复杂度超标和嵌套现象严重.同时,由于对多线程的不熟悉,将一些功能集中的放入了一个类里,这也是McC ...

  9. eclipse启动报错

    我的是win64位系统,eclipse,jdk1.8    64位 原因:网上说是jdk和eclipse的版本不一致导致的(32位jdk64位eclipse,或者相反): 解决过程: 安装了jdk1. ...

  10. Appium自动化测试之Appium的安装与配置

    Appium自动化测试- Appium环境的安装与配置Appium中文文档: https://github.com/appium/appium/tree/master/docs/cn Appium的安 ...