1.创建一个所有游戏类的直接/间接父类 GameObject ,然后在这个GameObject里设计所有游戏类都有的一些成员
2.创建一个如图属性就相当于实现了两行代码
如果只创建一个属性且这个属性没有对应的字段的话(对应的字段指字段名为属性的首字母小写版本),编译器会自动创建一个 private访问权限的字段,这个字段的类型和属性一致,且字段名为属性名首字母小写版本(属性名首字母必须大写)
在属性中只get和set访问器,其它啥也不写的话,则调用get / set访问器时会执行它们的默认功能
get : return 字段(属性名首字母小写版本) ; set : 将set中自创建的 value 赋值给 字段(属性名首字母小写版本)
3.C#中抽象函数只能够放在抽象类中,然后抽象函数在子类中被重写时也要用override修饰
4.抽象类由于无法实例化对象,所以在抽象类中也无法使用this,,this是一个空引用。
在c#中this是一个对象,在成员函数中被自动创建和使用,然后它这个对象引用指向的是调用当前成员函数的对象。
5.创建好枚举类enum,并且创建了枚举对象后,如果我们想给枚举对象赋值的话,赋值语法是:
枚举对象 = 枚举类名.要赋值给枚举对象的成员名
做值判断的时候也同理
6.对象创建好之后,把对象放到列表中进行统一管理
7.如何解决界面闪烁问题
目的:让图像在画面中稳定显示
问题:图像在画面中闪烁出现
在解决问题之前先定义一个概念:图像加载
我们将创建画布,在画布上创建游戏对象这一过程称为画面加载
目前我们的游戏图像显示逻辑:在画面加载的同时显示画面 --- 此时二者同时进行,这样的逻辑是有问题的,因为这就会导致我们能够看到的画面首先是黑画布,然后是黑画布+游戏物体,然后又是黑画布,又是黑画布+游戏物体...当画面转换足够快的时候(事实上也确实足够快,计算机的操作速度非常快),消失又出现的游戏物体就像灯泡一样,亮暗亮暗频繁切换进而出现闪烁现象,而黑画布由于处于常亮状态所以能够一直保持稳定显现,而不是和游戏物体一样闪烁
那么该如何解决这个问题呢?
答案是将逻辑调整为:在缓存区进行画面加载 ---》将加载好的画面传给显示区 ---》显示区直接显示完整画面 ---(由于计算机操作极快,上面这一套操作的时间可以忽略,所以依然可以保证一帧一图片,不过比起边加载边显示会慢点,但是能让画面稳定显现)
为了实现缓存图片,我们需要创建两个画布,一个是缓存画布(缓存区),一个是显示画布(显示区),我们现在缓存区中加载好图片,然后再将加载好的图片交给显示区显示
这一套流程会比直接显示慢,但是画面稳定,而且由于计算机操速度作极快,慢也只能慢个几毫秒,在人眼看来可以直接忽视,依然是保持一帧一画面。
整体步骤:1.创建临时画布,并用子线程中创建的画布接收这个画布(创建临时画布前我们需要先创建一张图片,然后以这个图片为基础创建画布,来对图片作画)
2.创建界面画布
3.在子线程中操作临时画布在图片上作画(加载图片)
4.将加载好的图片交给界面画布显示
5.静态成员不可以用this访问 --- 在类外访问静态成员时的访问方式:静态成员所属的类的类名.静态成员名 ; 在类内访问静态成员 --- 直接用静态成员名就可以访问。--- 除此之外就没有了
6.调用函数接收键盘信息,然后判定朝向
7.如果我们在属性的get,set的访问器中写了代码的话,我们就必须创建一个和属性相对应的。具有私有访问权限的变量,这个变量的类型和属性相同,变量名为属性名的首字母小写版本
上面这个是默认写法
下面这个是get,set写代码的写法
8.当两个线程同时执行的时候,可能会出现线程冲突。线程冲突的原因的是两个线程同时调用同一个资源,出现资源争抢现象,为了解决这个问题,我们需要去给对应的资源的调用操作加锁。
比如线程a中的操作c调用资源T的同时,线程b中的操作d也会调用资源T,由于同时调用,可能出现资源争抢现象,导致程序崩溃,为了解决这个问题我们可以给两个操作加锁。
加了锁之后的操作如果想要执行的话就必须先获取锁,而锁只有一个,谁先获取到锁谁就先执行,获取到被加锁操作执行,执行完后释放锁,没获取到锁的被加锁操作等待,锁被释放后获取锁然后执行操作