最强灌篮挑战达人之优化(二)

  在之前的游戏功能上,我们的策划再次给我添加了皮肤的功能。关于设计皮肤这项我也是似懂非懂的样子。由于需要使用到公司内部的封装代码,这里就不发详细的代码了。

皮肤,顾名思义就是更改它的SpriteFrame属性就可以了,关键就是怎么判断当前的图片或者说皮肤已经被我们购买了,我这里使用了公司的保存数据的封装方法,所以轻易就能使用,由于是第一次使用这种封装的方法所以我也不太熟。有问题就自己想吧。我这里只提供思路。当玩家点击该款皮肤时,首先获取判断当前皮肤是否已经购买了,如果被购买了就可以直接穿戴就行了,如果没有购买的话就弹出购买皮肤的窗口,之后的窗口会显示是否确认购买按钮,如果玩家点击确认购买,则是进入方法判断玩家的金币余额比该皮肤的标价金币是否要多,如果小于标价金币则是直接弹出警告提示,提示玩家金币余额不足,不能购买。这里有点需要说明的是,我把篮球直接做成了Button,当玩家点击该篮球皮肤时会直接把该金币的价格传入方法中,并保存。这里的皮肤图片的命名也是使用的价格。比如第三款皮肤的价格是200,而在资源图片中的命名方式是“Ball_200.png”这样命名的方式的好处在于,你之前保存了这个价格,而在你获取并判断时,就需要根据价格或者说是tag来判断你买的是那款皮肤(皮肤价格就是tag)。
 

这里首先说明啊,皮肤这里的代码不提供源码,只提供思路。由于之前如公司之前签约过保密协议。
下面就直接粘贴自己的代码了,公司的封装代码就不展示了:
//Skin_Window.js
cc.Class({
    extends: cc.Component,

    properties: {

        skin_ball:{
            type:cc.Node,
            default:[]
        },
       
        Gold_Label:{
            type:cc.Label,
            default:null
        },
    },

    // LIFE-CYCLE CALLBACKS:

    onLoad () {
        this.Con = cc.find("Canvas/Popup");
        this.initSkin();
        this.balance = Userdefault.getIntForKey(lieyou.Key_Gold,0);


        //this.child_1 =  node.removeChildByTag(1001);
    },

    update (dt) {
        this.Gold_Label.string = ' ' + this.balance;
       
    },

    start () {

    },

    /* 判断皮肤是否拥有,拥有就可以穿戴 */
    initSkin:function(){
        this.tags=[0,50,200,500,1000,1500,2000,3000,5000];
        var len = this.skin_ball;
        for (let index = 0; index < len.length; index++) {
            var element = this.skin_ball[index];
            var tag=this.tags[index];
            element.getChildByName("ball").tag=tag;

            if(tag != 0&&!Have_Skin.Get_Buy(tag))
                continue;
            if(tag == 0){

            }
            var mon = element.getChildByName("money_"+tag);
            var lab = element.getChildByName("Label_"+tag);
            if(mon){
                mon.destroy();
            }
            if(Have_Skin.GetCurrSkin()==tag){
                lab.active = false;
                element.getChildByName("Dressed").active=true;
                // //穿戴
                // Have_Skin.SetWearState("Ball_"+tag, tag)
            }else{
                element.getChildByName("Dressed").active=false;
                lab.active = true;
                lab.getComponent(cc.Label).string = "已拥有";
            }
           
        }
    },
    // update (dt) {},
     /*=========================按钮事件=========================*/
   ClickEvent(event, type) {
        this.Decide_Buy(type);
        this.initSkin();
    },

    Click_Close(){
        this.Con.active = false;
    },

    Decide_Buy:function(type){
        if(type == 0||Have_Skin.Get_Buy(type)){//已购买
            Have_Skin.SetCurrSkin(type);
            this.initSkin();
            console.log("已购买"); 
            //return;
        }else{//未购买
            console.log("未购买");
            this.Con.active = true;
            this.pice = type;
           // this.Con.tag=type;
        }
    },

    Click_Confir:function(){
        //Userdefault.setDataForKey(lieyou.Key_Gold,Userdefault.getIntForKey(lieyou.Key_Gold,0)+ 1);//保存金币值
        this.balance = Userdefault.getIntForKey(lieyou.Key_Gold,0);
        console.log("余额:"+this.balance);       
        if (this.balance > this.pice) {
            //金币数大于标价,且金币数为正数
            this.Click_Close();
            Userdefault.setDataForKey(lieyou.Key_Gold,Userdefault.getIntForKey(lieyou.Key_Gold,0) - this.pice);//保存金币值

            console.log("余额: ", this.balance);
            var tag = this.pice; 
            Have_Skin.Set_Buy(tag);
            var goldimg=cc.find("Canvas/Skin_background/Layout/Grid_"+this.pice+"/money_"+this.pice);
            var Label=cc.find("Canvas/Skin_background/Layout/Grid_"+this.pice+"/Label_"+this.pice);
            if(goldimg)
            {
                Label.getComponent(cc.Label).string = "已拥有"
                goldimg.destroy();
            }
        }
        else
        {
            console.log("余额不足");
           
            this.Balance_Tips();
        }

    },

    Balance_Tips:function(){
        var mark = cc.find("Canvas/Popup/Mark");
        mark.active = true;
        this.scheduleOnce(function() {
            mark.active = false;                        
        }.bind(this), 1);
        console.log("余额不足!");    
    },

    Click_Share_Close:function(){       
        //返回主界面    
        SdkManager.share({ name:GameName,source:2 ,success:function(type){
                cc.director.preloadScene("Start");
                cc.director.loadScene("Start");
          
        }});
    },
    Click_Close_Button:function(){
        cc.director.preloadScene("Start");
        cc.director.loadScene("Start");       
    },
});
//SkinData.js

window.Have_Skin = {
    skinSpriteframes:"resources/Texture/BasketBallSkin/Ball_",
    GetCurrSkin:function(){
        return Userdefault.getIntForKey("Skin_0",0);
    },

    SetCurrSkin:function(type){
        return Userdefault.setDataForKey("Skin_0",type);
    },

    Get_Buy:function(type){
        var key="key_qiu"+ type;
        return Userdefault.getBoolForKey(key,false)
        //未购买
    },

    Set_Buy:function(type){       
        var key="key_qiu"+ type;
        return Userdefault.setBoolForKey(key,true);
    },

    ////穿戴的情况
    SetWearState:function(type){
        return Userdefault.setDataForKey("Skin_name",type);
    },

    ////穿戴的情况
    GetWearState:function(){
       // var elves_path =Have_Skin.skinSpriteframes + Have_Skin.GetCurrSkin() + ".png";
        var elves_path =Have_Skin.skinSpriteframes + Have_Skin.GetCurrSkin() + ".png";
        var spfame= new cc.SpriteFrame(cc.url.raw(elves_path));    
        return spfame;
    },
}
皮肤选择好了之后就是在游戏界面里引用它就可以了。我这里有两处引用,一处是游戏中的篮球,一处是篮球的重影,也就是粒子特效,由于粒子特效比较难看,所以我这里直接用代码创建重影(重影创建在Updata)。

猜你喜欢

转载自blog.csdn.net/ji2570489271/article/details/81411495