فهرست منبع

滑动列表增加自动滑动到指定条目功能,

薛鸿潇 5 سال پیش
والد
کامیت
3693344e5c

BIN
assets/resources/module/receiptNotice/到账通知.png


+ 0 - 36
assets/resources/module/receiptNotice/到账通知.png.meta

@@ -1,36 +0,0 @@
-{
-  "ver": "2.3.5",
-  "uuid": "5d12289f-517c-4bc7-9e58-3174af57ee24",
-  "type": "sprite",
-  "wrapMode": "clamp",
-  "filterMode": "bilinear",
-  "premultiplyAlpha": false,
-  "genMipmaps": false,
-  "packable": true,
-  "width": 750,
-  "height": 1334,
-  "platformSettings": {},
-  "subMetas": {
-    "到账通知": {
-      "ver": "1.0.4",
-      "uuid": "7fe555ed-39aa-435c-a1ae-c47748d0ff9e",
-      "rawTextureUuid": "5d12289f-517c-4bc7-9e58-3174af57ee24",
-      "trimType": "auto",
-      "trimThreshold": 1,
-      "rotated": false,
-      "offsetX": 0,
-      "offsetY": 0,
-      "trimX": 0,
-      "trimY": 0,
-      "width": 750,
-      "height": 1334,
-      "rawWidth": 750,
-      "rawHeight": 1334,
-      "borderTop": 0,
-      "borderBottom": 0,
-      "borderLeft": 0,
-      "borderRight": 0,
-      "subMetas": {}
-    }
-  }
-}

+ 4 - 0
assets/resources/module/sign/sign.prefab

@@ -1602,6 +1602,7 @@
     "node_panel": {
       "__id__": 1
     },
+    "transition_type": 0,
     "onComplete": [],
     "_id": ""
   },
@@ -1654,6 +1655,9 @@
     "scroll_view": {
       "__id__": 12
     },
+    "node_content": {
+      "__id__": 8
+    },
     "anim_btn": {
       "__id__": 33
     },

+ 15 - 6
assets/script/game/component/TableView.ts

@@ -27,7 +27,7 @@ export default class TableView extends cc.Component {
     /** item预制体组 */
     private item: Array<any> = null;
     /** 滑动列表的内容节点 */
-    private content: any = null;
+    private content: cc.Node = null;
     /** 列表高 */
     private layerHeight: any = null;
     /** ? */
@@ -94,7 +94,7 @@ export default class TableView extends cc.Component {
         // }
         // cc.log(this.testTime(0));// 消耗计时
         this.initItem();
-        this.getItemPos(0);
+        this.initItemPos(0);
         this.scrollView.node.on('scrolling', this.callback, this);
         // cc.log('tableView结束:' + this.testTime());
     }
@@ -107,7 +107,7 @@ export default class TableView extends cc.Component {
 
     }
 
-    private getItemPos(index: number) {
+    private initItemPos(index: number) {
         let item_data_count = this.itemData.length;
         for (let i = index; i < item_data_count; i++) {
             let obj: any = {}
@@ -295,7 +295,7 @@ export default class TableView extends cc.Component {
     }
 
     /** 滚动到底部 */
-    private itemMoveDown(num: number) {
+    public itemMoveDown(num: number) {
         if (num < 0 || this.firstItemIndex - 1 > num || num + 1 > this.itemData.length) {
             return;
         }
@@ -348,6 +348,15 @@ export default class TableView extends cc.Component {
     }
 
     /**
+     * 内容滚动到指定下标位置
+     * @param index 条目index
+     */
+    public contentMoveByIndex(index: number) {
+        let pos_y = this.itemPosMap.get(index).startPos;
+        this.scrollView.scrollToOffset(new cc.Vec2(this.content.x, pos_y), 0.5);
+    }
+
+    /**
      * 得到相关位置的排序index
      * 方法待验证,可能有问题
      * @param pos 坐标
@@ -368,7 +377,7 @@ export default class TableView extends cc.Component {
      */
     public addItem(obj: any) {
         this.itemData.push(obj);
-        this.getItemPos(this.itemData.length - 1);
+        this.initItemPos(this.itemData.length - 1);
         let endPos = this.itemPosMap.get(this.itemData.length - 1).endPos;
         if (endPos - this.layerHeight > 0) {
             let startPos = endPos - this.layerHeight;
@@ -416,7 +425,7 @@ export default class TableView extends cc.Component {
         this.itemData.splice(i, 1);
         const item_data_count = this.itemData.length;
         if (item_data_count <= 0) return;
-        this.getItemPos(item_data_count - 1);
+        this.initItemPos(item_data_count - 1);
 
         //改变this.itemArr的内容
         for (let j = 0; j < this.itemArr.length; j++) {

+ 2 - 0
assets/script/game/data/GameData.ts

@@ -192,6 +192,8 @@ export enum AUDIO_TYPE {
 type PlayerInfoType = {
     /** 自定义不需要校验的数据 */
     gameUserData: object,
+    /** 今日是否有签到 */
+    isSignInToday: boolean,
     /** 存钱罐存款 */
     piggyBank: number,
     /** 存钱罐能否提现 */

+ 36 - 3
assets/script/game/data/module/SignData.ts

@@ -18,15 +18,21 @@ export class SignData extends Data {
                 }
             });
             this.c_sign = gData.gameData.configs.SignIn;
+            this.init_list = true;
         }
         // 服务端数据不对
         // this.sign_last_bar = gData.gameData.gameData.signInDay;
+        // this.sign_can = gData.gameData.gameData.isSignInToday;
+
+        // 客户端测试数据
         this.sign_last_bar = gData.gameData.getProp(GameProp.sign_last_bar);
         // this.sign_can = gData.gameData.getProp(GameProp.sign_can);
     }
 
     /** 标志位:是否需要刷新数据 */
     public init_data: boolean = false;
+    /** 标志位:是否初始化配置列表 */
+    public init_list: boolean = false;
 
     /** 配置数据 签到 */
     private _c_sign: Array<CSignType> = [];
@@ -38,8 +44,8 @@ export class SignData extends Data {
         return this._c_sign;
     }
 
-    // 服务端数据 上次签到天数
     private _sign_last_bar = 0;
+    /** 上次签到天数 */
     set sign_last_bar(value: number) {
         this._sign_last_bar = value;
         this.init_data = true;
@@ -48,8 +54,8 @@ export class SignData extends Data {
         return this._sign_last_bar;
     }
 
-    // 服务端数据 能够签到
     private _sign_can = 1;
+    /** 能够签到 */
     set sign_can(value: number) {
         this._sign_can = value;
         this.init_data = true;
@@ -59,7 +65,7 @@ export class SignData extends Data {
     }
 
     /** 签到列表数据 */
-    public list_data = [];
+    public list_data: Array<Array<CSignType>> = [];
     /** 初始化列表数据 */
     public initListData() {
         // if (!this.c_sign.length) this.c_sign = this.getSignConfig();
@@ -154,6 +160,33 @@ export class SignData extends Data {
         // 获得奖励
     }
 
+    /**
+     * 获取数据列表中第一个可签到条目的index
+     * @returns index
+     */
+    public getItemIndexByCanSign(): number {
+        let index = 0;
+        const l_count = this.list_data.length;
+        for (let i = 0; i < l_count; i++) {
+            const i_count = this.list_data[i].length;
+            for (let j = 0; j < i_count; j++) {
+                let state = this.getStateByDay(this.list_data[i][j].loginDay);
+                if (this.sign_can) {
+                    if (state === RewardState.unlock) {
+                        index = i;
+                        return index
+                    }
+                } else {
+                    if (state === RewardState.lock) {
+                        index = i;
+                        return index
+                    }
+                }
+            }
+        }
+        return index;
+    }
+
 }
 
 export type CSignType = {

+ 1 - 1
assets/script/game/module/module/reward/Reward.ts

@@ -107,7 +107,7 @@ export default class Reward extends cc.Component {
      * 看广告回调:开奖
      */
     private watchVideoCall() {
-        if (!gData.reward.data || gData.reward.data.length) return;
+        if (!gData.reward.data || !gData.reward.data.length) return;
         // 数据排序:多条奖励,只展示红包,把红包放在首位
         const r_count = gData.reward.data.length;
         if (r_count >= 2) {

+ 20 - 2
assets/script/game/module/module/sign/Sign.ts

@@ -1,3 +1,4 @@
+import TableView from "../../../component/TableView";
 import { AdFun } from "../../../data/AdData";
 import { GameProp, RewardState } from "../../../data/GameData";
 
@@ -15,9 +16,13 @@ export default class Sign extends cc.Component {
 
     @property({ type: cc.ScrollView, displayName: '滚动视图' })
     private scroll_view: cc.ScrollView = null!;
+    @property({ type: cc.Node, displayName: '滚动内容容器' })
+    private node_content: cc.Node = null!;
+
     @property({ type: cc.Animation, displayName: '按钮_动画' })
     private anim_btn: cc.Animation = null!;
 
+    private tableview: TableView = null;
     onLoad() {
 
     }
@@ -26,7 +31,6 @@ export default class Sign extends cc.Component {
         // gData.sign.sign_can = gData.gameData.getProp(GameProp.sign_can);
         gData.sign.initListData();
         gData.sign.init_data = true;
-        cc.log(gData.sign.sign_last_bar)
     }
 
     /**
@@ -35,16 +39,24 @@ export default class Sign extends cc.Component {
     private initScollView() {
         let list_data = gData.sign.list_data;
         this.scroll_view.node.emit('srollview-init', list_data)
+        this.tableview = this.scroll_view.node.getComponent('TableView')
+
+        let index = gData.sign.getItemIndexByCanSign();
+        this.tableview.contentMoveByIndex(index)
     }
 
 
     update(dt) {
         if (gData.sign.init_data) {
             gData.sign.init_data = false;
-            this.initScollView();
             this.initBtnStyle();
             return;
         }
+        if (gData.sign.init_list) {
+            gData.sign.init_list = false;
+            this.initScollView();
+            return;
+        }
         if (gData.sign.adData) {
             // 展示奖励
             this.getReward();
@@ -67,7 +79,13 @@ export default class Sign extends cc.Component {
      * 拿奖励
      */
     private getReward() {
+        let index_old = gData.sign.getItemIndexByCanSign();
+        // 完成展示
         gData.sign.signComplete();
+
+        // 指定条目数据刷新
+        this.tableview.resetItemData(index_old, gData.sign.list_data[index_old]);
+
         // 打开奖励界面
         // to do
     }