自动类型转换
条件:范围小的类型可以自动转换为大的类型(int<double)
例
int a=10;double b=a;
此时10被自动转换成10.0
收缩代码
#region 备注的名字
要收缩的代码
#endregion
强制类型转换
条件:你要确定这个范围大的类型所装的数据大小也在这个范围小的类型范围之内
要把范围大的类型强制转换为范围小的类型
例
double b=10.0;int a=(int)b;
此时10.0被强制转换成10
特别注意,父类比子类大
父类声明,子类构造是成立的
此时是自动把子类转换成父类了
但是这样只能调用父类里的数据,子类自己独特的数据调用不了
解决方法
子类声明然后把刚刚父类声明子类构造的那个对象放进来,需要强制转换
快捷键alt+回车(enter)
鼠标放在红线出错的地方使用快捷键,会自动弹出几种可行的修补方案
线程创建
创建一个方法
创建一个线程方法,放入方法
threadstart 线程方法名字=new threadstart(方法名字);
创建一个线程,放入线程方法
thread 线程名字=new thread(线程方法名字);
普通方法需要借助对象调用,静态方法可以直接调用
线程调用
线程名字.start();
线程的暂停
thread.sleep(m);暂停m毫秒后继续进行
线程暂停suspend();
线程继续resume();
暂停该线程直到某个指定线程结束为止join();
线程的终止
线程名字.abort();
分割类
可以把一个类分开写partial
窗体应用
需要用的音频图片什么的都放入到.resx中统一管理供窗体引用显示
调用资源
properties.resources.资源名字
使用资源
资源对应类型 起个名字=调用资源;
将窗体生成在当前屏幕的正中央
this.startposition=
formstartposition.centerscreen;
GDI画图(Graphics Device Interface)
应该在窗体的paint中绘制
构造个画布对象
Graphics 对象名字=this.CreateGraphics();
构造不直接显示的画布对象
Graphics 对象名字=Graphics.formimage(net bitmap(长,宽));
构造个画布对象
Pen 对象名字=new pen(形式参数);
这里的形式参数可以是颜色
color.指定的颜色(例黑black)
画图
要使用的画布对象名字.画图方法(要使用的画笔对象名字,画图方法所需的参数);
例画直线
a.drawline(b,new point(0,0),new point(100,100));
在a画布上用b画笔从0,0开始画画到100,100底位置
(窗体界面左上角是原点右边是X正下面是Y正
画直线darwline(画笔对象名字,起点坐标,终点坐标
画字符串drawstring(字符串,字体,画笔,起点
把图片资源画上darwimage(起的图片名字,X,Y)
坐标new point(x,y)
字体new font("字体名字",字体大小)
大小是像素大小,名字是隶书等不是自己起。。。。
画笔new solidbrush(color.颜色)
图片资源类型用bitmp
指定颜色变透明
对象名字.maketransparent(color.颜色);
png图片的背景是透明的
设计游戏画面的尺寸
在窗口.designed.cs中的
this.clientsize=new system.drawing.size(长,宽);
长宽都为13*30这里是像素单位
设计游戏标题
在尺寸下面
this.text="标题";
窗口关闭后游戏完全停止运行
窗口事件formclosing正在关闭的时候运行
formclosed关闭后运行
开始start
更新update
游戏框架gameframework
游戏对象Game object
速度speed
方向direction
游戏对象。
可移动,不可移动。
坦克,子弹。
我的坦克,敌人坦克。
静态方法只能调用静态的
解决闪屏问题
用一个图片创建画布画图片上然后把图片画到窗体的画布上
Graphics 画布名字=Graphics.fromimage(图片名字);
画布名字.darwimage(图片名字);
bitmap 图片名字=new bitmap(长,宽)
窗体事件
keydown
keyup
当某键按下时怎么怎么样
当某键抬起时怎么怎么样
监测键盘某个键
if(e.keycode ==keys.某个键){执行的代码;}
keycode是按键
keys是枚举类型里面有各个按键
将框架类作为中间站把按键事件传给坦克类
因为创造出来的坦克在资源类里面所以要先传到资源类再传到坦克
keyeventargs按键信息类
为了移动流畅设置个bool当按下bool为true抬起为false然后在资源类里给坦克写当bool为ture时运动的方法
碰撞检查
用将要到达的位置来判断是否碰撞
物体坐标是自己图形的左上角的坐标
高度height
宽度width
检查check
rectangle 对象名字=new rectangle(x,y,自身宽度,自身高度);
return 对象名字;
判断是否碰撞
对象名字.intersectswith(另一对象名字);
把自身传过去,this
锁(防止资源冲突)
声明
public static object 锁名字=new object();
使用
lock(锁名字){被锁的代码}
同一线程下锁没用
遍历列表数组时不能修改里面的数据会报错
音频类型soundplayer
声明并使用
soundplayer 对象名字=new soundplayer();
对象名字.stream=resources.音频名字;
对象名字.play();
stream是设置声音源的
play播放声音
多个不同声音的同时播放
策划
游戏对象分类
相同的属性都放在父类
子类实例化的方法不用static
重复调用的放一起
只用一次的放一起
定义构造函数把需要的设置好例如只用调用一次的
资源对象放一起
多个相同类的不同对象在资源类里有列表放一起
音频放一起
多个事件同时运行利用多线程
事件a放线程1事件b放线程2里每次调用一次然后该线程休息,调用另一线程
因为调用切换很快所以看上去像同时在执行