Android游戏开发---关于实体的绘制与跟踪技术

13 篇文章 0 订阅

Android游戏开发中,特别是飞行射击类游戏经常出现子弹的跟踪功能。贴一段代码。

public class Enemy
{
	private int x, y;
	private Bitmap ePlayer;
	private boolean flag = true;//标记是否有效. 被击中后变为无效的.
	private int dx, dy;	//飞机的偏移量
	private int pWidth, pHeight;
	private GameView gameView;
	private EnemyBullet enemyBullet;

	//getter and setter
	public boolean isFlag()
	{
		return flag;
	}

	public void setFlag(boolean flag)
	{
		this.flag = flag;
	}

	public Enemy(View view)
	{
		gameView = (GameView) view;
		pWidth = view.getWidth();
		pHeight = view.getHeight();

		x = new Random().nextInt(pWidth);	//敌机出现的位置0-320(屏幕宽度)
		y = new Random().nextInt(50) - 50;		//上移50像素, 有高有低的慢慢出来

		dy = new Random().nextInt(10) + 1;//1-10, 至少得动吧

		ePlayer = BitmapFactory.decodeResource(view.getResources(),
				R.drawable.e6);
	}

	public void drawSelf(Canvas canvas)
	{
		if (flag)   //敌机管理里面已经检测了
			canvas.drawBitmap(ePlayer, x, y, null);
	}

	public void enemyCheckCrash()
	{
		//遍历所有子弹
		for (PlayerBullet playerBullet : PlayerBulletManager
				.getAllPlayerBullet())
		{
			//如果敌机和玩家子弹都是有效的, 且发生碰撞
			if (this.flag == true
					&& playerBullet.isFlag() == true
					&& CheckCrash
							.ifCrash(
									x,
									y,
									x + ePlayer.getWidth(),
									y + ePlayer.getHeight(),
									playerBullet.getX(),
									playerBullet.getY(),
									playerBullet.getX()
											+ playerBullet.getBulletWidth(),
									playerBullet.getY()
											+ playerBullet.getBulletHeight()))
				;
			{
				//打到后敌机消失, 玩家子弹消失
				this.flag = false;
				playerBullet.setFlag(false);

				
				System.out
						.println(x
								+ " "
								+ y
								+ " "
								+ (x + ePlayer.getWidth())
								+ " "
								+ (y + ePlayer.getHeight())
								+ " "
								+ playerBullet.getX()
								+ " "
								+ playerBullet.getY()
								+ " "
								+ (playerBullet.getX() + playerBullet
										.getBulletWidth())
								+ " "
								+ (playerBullet.getY() + playerBullet
										.getBulletHeight()));

			}
		}

	}

	/**
	 * 敌机移动是随机的. 包括出现也是随机的.
	 */
	public void move()
	{
		//将偏移量的设置放到这里, 让飞机每次生成时的偏移的变化的
		int px = gameView.getPlayerManager().getPlayer().getX();
		//跟踪功能, 即设置dx增量
		if (px < x)		//玩家的位置在左边
			dx = new Random().nextInt(3) - 3;//-3~-1
		else if (px > x)//玩家的位置在右边
			dx = new Random().nextInt(3) + 1; //1~3
		else
			//正对着
			dx = 0;

		//敌机慢慢移动
		x += dx;
		y += dy;
		//敌机出屏幕后, 再重新回到上面去. 敌机中子弹了也要回到上面去
		if (x < -1 * ePlayer.getWidth() || x > pWidth || y > pHeight)
		//|| this.flag == false)
		{
			x = new Random().nextInt(pWidth);//敌机出现的位置0-320(屏幕宽度)
			y = new Random().nextInt(50) - 50;		//上移50像素, 有高有低的慢慢出来
			//this.flag = true; 		//飞机又重新有效
		}
	}

	/**
	 * 敌机发射子弹
	 */
	public void fire()
	{
		enemyBullet = gameView.getEnemyBulletManager().getOneBullet();
		//设置子弹的位置.
		//x = 敌机当前x + 敌机宽度/2 - 子弹宽度/2
		//y = 敌机当前y + 飞机高度   (子弹高度 这里就不计算了)
		enemyBullet.setPosition(
				x + ePlayer.getWidth() / 2 - enemyBullet.getEnemyBulletWidth()
						/ 2, y + ePlayer.getHeight());
		enemyBullet.setDy(dy + 3);//保证子弹比飞机快, 设置敌机子弹的移动增量
	}
}

待完善。


转自:http://blog.csdn.net/xn4545945/article/details/8744231

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值