创建扑克对象

  • 框架
  • Lua面向对象相关
  • 创建扑克类
  • 创建扑克精灵
  • 让我们实现一个简单的功能:
    • ui布局
  • 效果图

框架

根据 https://github.com/Tencent/xLua 的教程搭建的框架

Lua面向对象相关

lua 面向对象,我从云风大神那边拿了过来:
https://blog.codingnow.com/cloud/LuaOO

创建扑克类

---扑克类Poker = class()--- 扑克类Poker = class()function Poker:ctor(id, name, num)self.id = id or 0               --- 扑克id,这里主要是指 对应的图片资源的idself.name = name or ''          --- 扑克名称self.num = num or 0             --- 扑克的编码,一个整数,标识同一花色的扑克牌
endfunction Poker:ctor(id, name, num, isPlay)self.id = id or 0               --- 扑克idself.name = name or ''          --- 扑克名称self.num = num or 0             --- 扑克的编码self.isPlay = isPlay or true    --- 是否打出去了
end--- 获取扑克id , 扑克的唯一id
function Poker:getId()return self.id
end--- 设置扑克id
function Poker:setId(id)self.id = id
end---获取牌的名称
function Poker:getName()return self.name
end--- 设置牌的名称
function Poker:setName(name)self.name = name
end--- 获取扑克的编码
function Poker:getNum()return self.num
end--- 设置扑克的编码
function Poker:setNum(num)self.num = num
end--- 判断扑克是否打出去了, true表示打出去了, false 表示没有打出去
function Poker:getIsPlay()return self.isPlay
endfunction Poker:setPlay(is_play)self.isPlay = is_play
end

使用也是很简单:
记得 require(‘class.class’) class 父类, 根据你自己存放的路径来写。
然后:

 require('game_thing.Poker')local poker = Poker.new(0, 'A', 1, true)print(poker:getName())

将会打印:
A

创建扑克精灵

我们首先来实现一个简单的功能

--- 扑克精灵类,即一张扑克的UI表现PokerSprite = class()local rect_transform
local transformfunction PokerSprite:ctor(id, name, num)self.id = id or 0               --- 扑克idself.name = name or ''          --- 扑克名称self.num = num or 0             --- 扑克的编码self.image = nilendfunction PokerSprite:ctor(id, name, num, isPlay, isUp, isSelected)self.id = id or 0               --- 扑克idself.name = name or ''          --- 扑克名称self.num = num or 0             --- 扑克的编码self.isPlay = isPlay or true    --- 是否打出去了self.isUp = isUp or false       --- 扑克是否翻上来self.isSelected = isSelected or false --- 是否被选中self.image = nilendfunction PokerSprite:getId()return self.id
endfunction PokerSprite:setId(id)self.id = id
endfunction PokerSprite:getName()return self.name
endfunction PokerSprite:setName(name)self.name = name
endfunction PokerSprite:getNum()return self.num
endfunction PokerSprite:setNum(num)self.num = num
end--- 判断扑克是否打出去了, true表示打出去了, false 表示没有打出去
function PokerSprite:getIsPlay()return self.isPlay
endfunction PokerSprite:setPlay(is_play)self.isPlay = is_play
end--- 判断牌是否往上提,表示 想出这张牌
function PokerSprite:getIsUp()return self.isUp
end--- true 表示往上抽牌,想出这张牌。 false 把牌抽回来,不想出这张牌
function PokerSprite:setUp(is_up)--如果扑克已经抽了出来,又调用了抽出来, 或者 扑克没有被抽出来,又调用了放回去 。 则什么都不做if ((self.isUp == true and is_up == true) or (self.isUp == false and is_up == false) )thenreturn nilendself.isUp = is_upif (self.isUp == true)thentransform.position = CS.UnityEngine.Vector3(transform.position.x, transform.position.y + 75, transform.position.z)elsetransform.position = CS.UnityEngine.Vector3(transform.position.x, transform.position.y - 75, transform.position.z)end
end--- 判断牌是否被选择了
function PokerSprite:getIsSelected()return self.isSelected
end--- 设置牌是否选中 true 表示选择了这张牌, false表示不选这张牌
function PokerSprite:setSelected(is_selected)self.isSelected = is_selected
endfunction PokerSprite:start(image_url)---local button = CS.UnityEngine.GameObject.Find('Canvas/Button'):GetComponent(typeof(CS.UnityEngine.UI.Button))---button.onClick:AddListener(function ( )---print('click me')---end)self.image = CS.UnityEngine.GameObject.Find(image_url):GetComponent(typeof(CS.UnityEngine.UI.Image))---改变Image组件的宽高,使他跟牌的原始图片的宽高一致transform = self.image.transformrect_transform = transform:GetComponent(typeof(CS.UnityEngine.RectTransform))local newSizeDelta = CS.UnityEngine.Vector2(105, 150)rect_transform.sizeDelta = newSizeDelta--默认给一张翻的牌ResourceManager:LoadObject('Game/Doudizhu/res/poker/down', function( obj )self.image.sprite = obj:ToSprite()end)---self:changeImage()
endfunction PokerSprite:changeImage()-- bodystring.format("Game/Doudizhu/res/poker/%d", self.id)ResourceManager:LoadObject(string.format("Game/Doudizhu/res/poker/%d", self.id), function( obj )self.image.sprite = obj:ToSprite()end)
endfunction PokerSprite:turnUp()-- bodyself:changeImage()
endfunction PokerSprite:turnDown()-- bodyResourceManager:LoadObject('Game/Doudizhu/res/poker/down', function( obj )self.image.sprite = obj:ToSprite()end)
endfunction PokerSprite:turn(isUp)-- bodyif (isUp == true)thenself:turnUp()elseself:turnDown()end
end

让我们实现一个简单的功能:

ui布局

  1. 点击扑克牌,扑克牌向上移动,模拟抽牌动作

BattlePanel 就是一个Panel

function BattlePanel.Init()---LuaUtils.UI.BindClick(transform, 'Image', BattlePanel.OnClicked_StartBattle)-- DEBUG---LuaUtils.UI.BindClick(transform, 'Image', BattlePanel.OnClicked_StartBattle)poker = Poker.new(1, 'K', 1, true)poker_sprite = PokerSprite.new(poker:getId(),poker:getName(), poker:getNum(), false, false, false)poker_sprite:start('Canvas/Panels/BattlePanel/Image')poker_sprite:turn(true)isUp = true
endfunction BattlePanel.OnClicked_StartBattle()print('开始发牌')poker_sprite:setUp(isUp)isUp = not isUp
end

效果图

开始运行,没有点击扑克

点击扑克后的效果,往上移动了一截

unity3d + lua + 斗地主 系列 (1) 创建扑克对象相关推荐

  1. Unity3D脚本中文系列教程(七)

    http://dong2008hong.blog.163.com/blog/static/4696882720140311445677/?suggestedreading&wumii Unit ...

  2. Unity3D脚本中文系列教程(五)

    http://dong2008hong.blog.163.com/blog/static/4696882720140302848544/?suggestedreading&wumii Unit ...

  3. 【Lua进阶系列】实例lua调用capi

                             [Lua进阶系列]实例lua调用capi     大家好,我是Lampard~~     欢迎来到Lua进阶系列的博客     首先祝大家2021新年 ...

  4. 【Lua进阶系列】lua_Stack

                              [Lua进阶系列]lua_Stack     大家好,我是Lampard~~     欢迎来到Lua进阶系列的博客 前文再续,书接上一回.今天和大家 ...

  5. 五种方法创建 Java 对象,你知道几种呢?

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 来源 | 网络 五种方法创建java对象 作为Java开 ...

  6. [Hibernate系列—] 2. 创建SessionFactory 与 Session

    Configuration 对象创建 要创建SessionFactory , 首先要创建Configuration 对象. 这个对象就是去读取hibernate 的一些配置信息. 默认状况下, hib ...

  7. Spring AOP 源码分析 - 创建代理对象

    1.简介 在上一篇文章中,我分析了 Spring 是如何为目标 bean 筛选合适的通知器的.现在通知器选好了,接下来就要通过代理的方式将通知器(Advisor)所持有的通知(Advice)织入到 b ...

  8. 深入理解ajax系列第一篇——XHR对象

    前面的话 1999年,微软公司发布IE5,第一次引入新功能:允许javascript脚本向服务器发起HTTP请求.这个功能当时并没有引起注意,直到2004年Gmail发布和2005年Google Ma ...

  9. 创建相似对象,就交给『工厂模式』吧

    源码: 源代码C# 系列导航: 目录 定义(Factory Pattern): 用来创建目标对象的类,将相似对象的创建工作统一到一个类来完成. 一.简单工厂模式: 代码: /// <summar ...

  10. oracle怎么删除lob对象,Oracle系列:LOB大对象处理

    Oracle系列:LOB大对象处理 Oracle系列:LOB大对象处理 主要是用来存储大量数据的数据库字段,最大可以存储4G字节的非结构化数据. 主要介绍字符类型和二进制文件类型LOB数据的存储,单独 ...

最新文章

  1. storm能不能测试wadl_情感测试:4朵玫瑰花,哪个会最扎手?测你婚后能不能享住TA?...
  2. Castle IOC容器与Spring.NET配置之比较
  3. 解决逆向工程mapper映射文件不发布问题
  4. [转载]ext4的noatime
  5. 基本排序算法及分析(二):冒泡排序
  6. 归档-软考网规-存储部分-san-nas-das
  7. C++ 容器适配器priority_queue的使用及实现
  8. Zookeeper Python
  9. 阶段3 3.SpringMVC·_06.异常处理及拦截器_1 SpringMVC异常处理之分析和搭建环境
  10. 6U VPX 高性能数据存储板 (2 片XC7K325T)
  11. linux 取消分区,如何在 Linux 中删除分区 | Linux 中国
  12. c语言的vcl库函数下载,VCL手册 PDF
  13. haproxy的frontend/backend和listen区别
  14. e5 2680v3和e5 2682v4有什么区别
  15. 古希腊神话故事:菲勒美拉
  16. 用Excel分析音视频同步
  17. Golang-channel实现
  18. 51nod 1326 遥远的旅途 最短路建模
  19. NoMachine 输入用户名密码后 闪断 解决办法
  20. 树莓派4B与Android之缘——树莓派下LineageOS(Android 9)系统开机联网与远程控制

热门文章

  1. 自动装载寄存器 (TIMx_ARR)、预分频器寄存器(TIMx_PSC)解析
  2. PS压缩图片文件大小,不失真!!!
  3. 闪电对计算机或网络设备的威胁,计算机网络的雷电防护_计算机网络
  4. 积分mysql_会员积分表字段 数据库
  5. Get IT技能百科库 50个领域轻松直达
  6. 鼠标单击双击事件监听
  7. C语言中整型变量四舍五入,怎样将整型变量按四舍五入转换成整数
  8. 多个优速快递的物流信息是怎么批量查询的
  9. 输入半径 求球的表面积和体积
  10. 【5G核心网】5GC核心网之网元AMF