command()函数说明

command()函数说明

void command(role* p1, role* p2) {
	BeginBatchDraw();
	draw_fight(p1, p2);//画战斗背景,如血量变化、背景图,人物头像

					   /*action说明
					   *	switch(action)
					   *		case 1:跳跃;	case 2:拳击;
					   *		case 3:腿击;	case 4:技能1;
					   *		case 5:技能2;	case 6:技能3;
					   *		case 7:移动;	case 8:防御;
					   *		case 0:站立;	case 9:被打
					   */

					   //使P1的各操作异步,使P2的各操作异步
					   //P1操作
	if (GetAsyncKeyState('S') & 0x8000 && (p1->action == 8 || p1->action == 0))
	{
		p1->action = 8;
		p1->Defend(p2);
	}
	else if (!(GetAsyncKeyState('S') & 0x8000) && p1->action == 8)
		p1->action = 0;


	//挨打状态
	if (p1->action == 9) {
		p1->Beaten(p2);
		if (p1->count_beaten != 0)
			p1->action = 9;
		else
			p1->action = 0;
	}

	//进入跳跃状态 优先让跳跃完成 coun_jump==0时完成
	if ((GetAsyncKeyState('W') & 0x8000 && p1->action == 0) || p1->action == 1) {
		p1->Jump(p2);
		if (p1->count_jump != 0)
			p1->action = 1;
		else
			p1->action = 0;
	}

	//如果不在跳跃状态则允许进入攻击或释放技能状态 
	if (GetAsyncKeyState('J') & 0x8000 && p1->action == 0 || p1->action == 2) {
		p1->fistAttack(p2);
		if (p1->count_fist != 0)
			p1->action = 2;
		else
			p1->action = 0;
	}

	if (GetAsyncKeyState('K') & 0x8000 && p1->action == 0 || p1->action == 3) {
		p1->legAttack(p2);
		if (p1->count_leg != 0)
			p1->action = 3;
		else
			p1->action = 0;
	}

	//技能必须完全释放
	if (GetAsyncKeyState('U') & 0x8000 && p1->action == 0 || p1->action == 4) {
		p1->skill_I(p2);
		if (p1->count_skill1 != 0)
			p1->action = 4;
		else
			p1->action = 0;
	}
	if (GetAsyncKeyState('I') & 0x8000 && p1->action == 0 || p1->action == 5) {
		p1->skill_II(p2);
		if (p1->count_skill2 != 0)
			p1->action = 5;
		else
			p1->action = 0;
	}
	if (GetAsyncKeyState('O') & 0x8000 && p1->action == 0 || p1->action == 6) {
		p1->skill_III(p2);
		if (p1->count_skill3 != 0)
			p1->action = 6;
		else
			p1->action = 0;
	}

	//如果不在跳跃或攻击施法状态 则可以移动
	if (GetAsyncKeyState('A') & 0x8000 && (p1->action == 0 || p1->action == 7)) {
		p1->LeftMove(p2);
		p1->action = 7;
	}

	if (GetAsyncKeyState('D') & 0x8000 && (p1->action == 0 || p1->action == 7)) {
		p1->RightMove(p2);
		p1->action = 7;
	}

	if (p1->action == 0) {
		p1->Stand(p2);
	}
	else if (p1->action == 7)
		p1->action = 0;

}

进入游戏界面,command()函数会对玩家的输入结合角色当前状态进行下一步动作的判断。
以P1的操作为例,最开始判断若角色在站立(0)状态下,则收到输入S,可进入防御状态(8),若当前状态已为防御状态则继续保持。
如果在本次判断中没有收到S键,则终止防御状态。
只要在P2的成员函数里改变了P1的action为挨打(9)状态,P1立即进入挨打(9)状态。
跳跃状态优先于技能和普攻,如果在跳跃状态(1)收到W输入或跳跃动作未完成则继续跳跃动作的贴图。
攻击和技能释放的优先级较低,仅高于移动、站立状态。
攻击和技能要求一次将整个动作贴图完成,利用相应的count变量记录贴图是否完成,如果未完成则保持当前攻击或技能状态,继续动作的贴图。
上述判断做完之后,再对移动按键进行判断,如果有A或D输入则进入移动状态(7),移动状态不会完成整个移动动画,必须持续按键才能连续移动,因为在判断最后如果处于移动状态会被转到站立状态(0),只有下一次输为A或D才能极快的刷新掉站立状态,从而使得移动动画连贯。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值