Poker UI 2 美工分类

晚上睡觉看会书, 养成习惯。   早上路边多想想商机 发家致富

------------------------

美工分类:
1: UI设计师 (button  进度条 Icon 。。。)
2: 原画设计师(用画笔+画板  分:人物原画, 场景原画, 插画。。。)-- 百度
3: 3D
4: 特效设计师(3D, 2D 动画 序列帧)

---------------------

 2)动态页面是以ASP、PHP、JSP、Perl、或CGI等编程语言制作的
  静态网页和动态网页的主要区别在于在服务器上是否运行程序,运行在客户端的程序、页面等等都是静态页面,它们是一直不变的。(看内容是否变化,百度 hao123动态)

-------------------------------------------------------------------------------Thursday----------

A  避免复制粘贴,如果看见重复代码时应该有意识要消灭它
例1: 急速消除的5个生命值❤️和快速购买, 在游戏开始, GameLayer, 商店storeScene中重复写了三遍,对于有些可能不用显示的,写个接口setvisible Ok 了
例2: 播放粒子特效的代码, 单独写个函数


B 在处理“现有代码”时尽量用重构代替重写,在重写之前一定要先重构
例如:花一下午时间,文件组织结构,  代码组合


C 尽量让所有的方法都是可测试的,结果:这样功能自然就单一了
例如: poker 的测试


D  通过依赖倒置原则:  看出啥叫《高耦合》

----------------------------------

 对象之间的包含关系

 A列出所有的要素   B WHO管理who(目录结构  代码结构)


1:   数据是为UI服务的, 所以playerNode..要使用playerData中的值


2:  待数据更新之后,通过事件或消息机制,刷新UI

---- 获取玩家信息
pomelo_event("getPlayerInformation")
function  Receive.getPlayerInformation(  data )  — 拿到的数据
    -- notice.post()   --  处理数据  通知 UI      比如:新增加一个玩家。。。
end

3: 对类中"数据成员"的访问,一尽量通过接口,而不是对象/变量.    getxxxxx()    --Quick也应遵守          封装性 *********** 重要的基础知识
            set/getXXX() 函数

4:  之所以不能像,<cocos2d-x手机游戏开发一书>那样,看到神魔(Hero map  button)写什么 --本身是没问题的
 但是头说:  那样你以后扩展(可维护性)太差。

----------------------------------------------------Monday----------------------------------------------

1:      local tx, ty = target:getPosition()  返回的时2个  x y  不是 pos

2:   数据咋就没有上,    如何与UI联系上

        8个玩家如何一一对应起来

租赁合同   不是协议 --- 搬家140平方  违约押金不对

--------Tuesday:---------------------------------------------------------------------------------------

与周。。任。。相比自己还是很落后。。。

1:   function  PlayerNode:initPlayerUI( seatId )                 -- 8个玩家如何一一对应起来
-- self.names.status:setString(playerData.name_)   ;
    
  self.names.status:setString( user.players[seatId].name_)   ;
end

2:   比较2者差距:
   -- 获取每个座位上的状态, 如果有,侧获取该座位上的玩家
     user.players[i]:setData(data[i])

     -- user.player[i] = data[i]  -- 这样意味着 服务器用什么字段,这边就必须一样

3:  头的分离数据 UI:
 主要是方便维护, 以后只用修改一个地方, 而不用去修改多个地方
例如: setData(data[i]) 到时候服务器变化了,我只需要修改setData()函数旧OK。
 但是如果  数据UI合着写的话,会出现一团糟, 如10隔地方用到就需要修改10个地方

静态网页和动态网页区分:看内容变化吗   

--------------

文件的分布: 本质来源于:逻辑部分(即:谁做为谁的对象)
      子文件作为代码上表现为定义该类对象

class GameScene : public cocos2d::Layer   // 该类 管理矩阵;  胜利失败结算层
{
private:
GameLayer* m_layer;
WinLayer * m_winLayer;
};


class GameLayer : public cocos2d::Layer
{
private:
    StarArry *m_starArry;
    StarStage *m_stage;
    Word     * m_word;
    CutDown  *m_cutDown;
};


-----------------------------------------------------------------------------------Wednesday-------------

1: 
OOP概念:封装、继承、多态。
粗浅的解释封装就是对数据进行隐藏;
继承就是子类继承父类(class)或接口(interface)的方法和属性,并实现代码复用;
多态就是重载和重写。
这样的解释仍仅仅只是面向对象的基本特征,很浅显,根本无法让人知道如何去思考和设计面向对象编程。
2:
    依赖倒置原则的核心就是要我们面向接口编程,理解了面向接口编程,也就理解了依赖倒置
面向接口的编程: 对数据的访问通过接口set/getxx()函数, 不能直接访问   oop   ocp

3:

聚合关系一般使用setter方法给成员变量赋值。
一般来说,为了表示组合关系,常常会使用构造方法来达到初始化的目的,例如上例中,加上一个以Car为参数的构造方法

4:

定义:高层模块不应该依赖低层模块,二者都应该依赖其抽象;

解决方案:将类A修改为依赖接口I,类B和类C各自实现接口I,类A通过接口I间接与类B或者类C发生联系,则会大大降低修改类A的几率。

-------------------

3: 维护起来方便: 例子:添加粒子特效的函数,应为用的多, 单独写个函数, 需求变化时只用修改一处OK 


4:JoinTable  对玩家的处理放到了GameScene中了。 
---上午刚看过,GameLayer::getSelf()->clearGame();   谁的谁管理,哎。。。

----------------------

感悟二:   "站在不同的高度, 看到不同的风景"吧. 

     正如老总看的是公司发展方向, 主管却在看业绩, 经理在看项目, 小弟们在看代码...

感悟三: 设计模式很重要
    设计模式是我到公司才接触的事物, 主要是讲述一种面向接口的编程思维, 按照设计模式所编写的代码, 会比学校那种直接实现功能的代码繁琐一点, 增加很多看似多余的虚类或者接口. 但是这种代码更加具有拓展性, 更好地把数据封装起来. 在增加状态, 增加类的时候, 并不需要修改过多代码, 这种代码对于版本升级尤其重要.
    在公司培训学习中, 我总能很快地掌握各种设计模式的要领, 获得上司的好评. 但是我明白, 设计模式真要应用到代码中去, 是要培养一种习惯.







class GameScene
{
    BackGround* bg;
};


class Monster
{
    emite(int id);
    bool isMy;
};


class Player : Monster
{
};


目录结构   1 对象之间的包含关系  A列出所有的要素   B WHO管理who
class Manager
{
    checkBlock()
    {
        //检查怪物和我方子弹的碰撞
        for monsters
        {
            for myBulltes
            {
                checkBlock(monster,bullte)
            }
        }
        
        //检查我方和怪物子弹的碰撞
        for monsterBulltes
        {
            checkBlock(player,bullte)
        }
        
    }
    
    checkBlock(Monster* ,bullte)
    {
        //销毁碰撞的子弹,以及出屏幕的子弹
        bullte->setVisible(false)
        unusedBulltes.push_back(bullte);
    }
    
    createBullte()
    {
        if(myUnuseBulltes.size() > 0)
        {
            unuseBulltes.pop_back();
            myBulltes.push_back()
            
        }
        else
            new
            myBulltes.push_back
    }
    

选择 set  map   vector  看主要做什么》 效率高
GameScen 只是个容器,  所有处理逻辑部分放在Manger中
    
    set<Bullte*> myBulltes;
    set<Bullte*> monsterBulltes;
    
    
    set<Bullte*> unusedBulltes;
    
    
    set<Monster*> monsters;
    set<Monster*> unusedMonsters;
    
    
    Player* player;
};

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值