⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gameobject_player_plane.cs

📁 这是网上下载的很好的串口发短信的程序! 是用VC++来做的
💻 CS
字号:
using System;
using System.Reflection;
using Microsoft.DirectX.DirectInput;
using DDGameHelper;

namespace ddt2
{
	/// <summary>
	/// GameObject_Player_Plane 的摘要说明。
	/// </summary>
	public class GameObject_Player_Plane : GameObject
	{
		/// <summary>
		/// 同类型的GameObj计数器(主要作用于资源管理。当 counter > 0 时,即便调用 dispose 也不释放 resource)
		/// </summary>
		private static int _counter = 0;
		/// <summary>
		/// 指向 BmpRectCombo Collection 的 索引
		/// </summary>
		private static int _indexOfBmpRectComboCollection = 0;

		private double _maxX = 0.0, _maxY = 0.0;	//临时用用,越界判断
		private int _middF = 0;	//中间帧,控制飞机恢复平衡显示(无控制状态frame自动向中间靠拢)
		private double _middT = 0.0, _lastT = 0.0;	//中间帧的时间
		private double _spaceKeyTime;	//空格键发生数的节制
		private bool _spaceKey;	//空格键发生数的节制

		public override int IndexOfBmpRectComboCollection()
		{
			return _indexOfBmpRectComboCollection;
		}
		public override string Name()
		{
			return _type.ToString();
		}

		public override object Properties()
		{
			return null;
		}

		private static GameObject_Enum _type = GameObject_Enum.Player_Plane;
		public override int Type()
		{
			return (int)_type;
		}

		public GameObject_Player_Plane(double x, double y, double velX, double velY, double velF,  ref GameLoopHandler gameLoopHandler) : base(ref gameLoopHandler)
		{
			BmpRectCombo brc= ((BmpRectCombo)_bmpRectComboCollection[_indexOfBmpRectComboCollection]);
			_velF = velF;
			_x=x; _y=y;
			_velX=velX; _velY=velY;
			_maxX = GameSettings._screenWidth - brc.RectangleArray.Rectangles[0].Width;
			_maxY = GameSettings._screenHeight - brc.RectangleArray.Rectangles[0].Height;
			
			_lastF = brc.RectangleArray.Rectangles.Length - 1;

			_middF = _lastF / 2;
			_lastT = brc.RectangleArray.Rectangles.Length * _velF;
			_middT = _lastT / 2;

			_currF = _middF;
			_currT = _middT;
		}

		protected override void Init()
		{
			LoadResource();
		}

		
		protected override void LoadResource()
		{
			_counter++;
			if(_counter==1)
			{
				BitmapObject bo = new BitmapObject(BitmapDisplayType.Transparent, GameSettings.GetResourceStream("ddt2.Resource.Picture.Player_Plane_1.png"));
				RectangleArray ra = new RectangleArray(bo.Size.Width, bo.Size.Height, 50, 56, 0);
				DDHandler d=_glh.DDHandler;
				_indexOfBmpRectComboCollection = _bmpRectComboCollection.Add(new BmpRectCombo(ref bo, ref ra, ref d));
			}
		}

		protected override void UnloadResource()
		{
			_counter--;
			if(_counter==0)
			{
				_bmpRectComboCollection[_indexOfBmpRectComboCollection] = null;
			}

		}
		public override void Process()
		{
			double elapsedTime=_glh.LoopDuration;

			//处理飞行方向与 frame 显示的关系
			if (_x == _lastX)		//未移动, frame 向中间那帧转变(加进了防止颤动的处理)
			{
				if(_currT < _middT)
				{
					if(_currT + elapsedTime > _middT) _currT = _middT;
					else _currT += elapsedTime;
				}
				else if(_currT > _middT)
				{
					if(_currT - elapsedTime < _middT) _currT = _middT;
					else _currT -= elapsedTime;
				}

			}
			else if (_x > _lastX)	//正在向左移, frame 向左边转变
			{
				_currT += elapsedTime;
			}
			else						//正在向右移, frame 向右边转变
			{
				_currT -= elapsedTime;
			}
				
			//越界处理
			if(_x>_maxX)_x=_maxX;
			if(_x<0)_x=0;
			if(_y>_maxY)_y=_maxY;
			if(_y<0)_y=0;

			if(_currT<=0)_currT=1;
			if(_currT>=_lastT)_currT=_lastT-1;

			_currF = (int)(_currT / _velF);

			//碰撞检测
			//

				
			_lastX = _x; _lastY = _y;
		}
		public override void Process(ref Microsoft.DirectX.DirectInput.KeyboardState ks)
		{
			bool left,right,up,down;
			double elapsedTime=_glh.LoopDuration;

			left=ks[Key.LeftArrow]||ks[Key.NumPad4]; right = ks[Key.RightArrow]||ks[Key.NumPad6];
			up = ks[Key.UpArrow]||ks[Key.NumPad8]; down = ks[Key.DownArrow]||ks[Key.NumPad2];

			if(left & !right)_x-=elapsedTime/_velX;
			else if(!left & right)_x+=elapsedTime/_velX;
			if(up & !down)_y-=elapsedTime/_velY;
			else if(!up & down)_y+=elapsedTime/_velY;

			double x,y,vx,vy,vf;

			if(ks[Key.Space] || ks[Key.LeftControl])
			{
				if(_spaceKey)
				{
					_spaceKeyTime+=_glh.LoopDuration;
					if(_spaceKeyTime>50)
					{
						_spaceKeyTime-=50;
						_spaceKey=false;
					}
				}
				else
				{
					_spaceKey=true;
					x=_x+9;
					y=_y-20;
					if(y<0)y=0;
					if(x<0)x=0;
					vx=_glh.RandoM.NextDouble()*20+5;
					vy=_glh.RandoM.NextDouble()*20+5;
					vf=_glh.RandoM.NextDouble()*78+2;

					_glh.GameObjectCollection.Add(new GameObject_Sprite(x,y,vx,vy,vf,AnimatePlayMethods.Reverse,true,ref _glh));
					FireSound();
					//_glh.GameObjectCollection.Add(new GameObject_Blast1(x,y,vx,vy,80,ref _glh));
				}
			}
			else
			{
				_spaceKey=false;
			}
		}
		private void FireSound()
		{
			_glh.DSHandler.Stop();
			_glh.DSHandler.LoadSoundFile(GameSettings.GetResourceStream("ddt2.Resource.Sound.plane_shoot.wav"));
			_glh.DSHandler.Play();
		}
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -