?? player_west.java~2~
字號:
}
}
if (idUse == -1)
{
cloudIdx = -1;
}
else
{
int dXUse = 0;
int dYUse = 0;
if (npc.npc[idUse].littleId == 1)
dXUse = -npc.npc[idUse].speed;
if (npc.npc[idUse].littleId == 2)
dYUse = -npc.npc[idUse].speed;
WestGameCanvas.mapX += dXUse;
WestGameCanvas.mapY += dYUse;
for (i = npcLen; --i >= 0;)
if (npc.npc[i] != null)
npc.npc[i].move(dXUse, dYUse);
}
}
Npc_West npcTemp;
int tempId;
short[] arrayTemp;
for (i = npcLen; --i >= 0;)
{
npcTemp = npc.npc[i];
if (null != npcTemp && npcTemp.num != -1 && npcTemp.visible)
{
//與npc的碰撞檢測
int collectFram;
tempId=(npcTemp.id==3&&WestGameCanvas.gameLevel>2)?0:npcTemp.id;
switch (tempId)
{
//普通NPC
case 0:
if ((3934 & prePlayerState) == 0
|| (42 & npcTemp.npcState) == 0)
break;
collectFram = npcTemp.frameSequence[npcTemp.getFrame()];
if(npcTemp.id==3)
arrayTemp = data.BossFrame(npcTemp.id)[collectFram];
else
npcTemp.defineCollisionRectangle(arrayTemp[0],
arrayTemp[1], arrayTemp[2], arrayTemp[3]);
collectFram = frameSequence[getFrame()];
arrayTemp = data.getPlayerRec()[collectFram];
if ((8 & npcTemp.npcState) != 0)
{
defineCollisionRectangle(arrayTemp[0],
arrayTemp[1], arrayTemp[2], arrayTemp[3]);
if (collidesWith(npcTemp))
{
playerState = 128 + (1 & prePlayerState);
if(npcTemp.id==3)
WestGameCanvas.hp -= data.getBossKind()[npcTemp.littleId][5];
else
WestGameCanvas.hp -= data.getNpcKind()[npcTemp.littleId][5];
npcTemp.x += (1 & npcTemp.npcState) == 0 ? -20
: 20;
}
}
//TODO player collide with npc
if ((64 & prePlayerState) != 0)
{
int wcx, wcw = 24;
//判斷是否使用棒子,計算攻擊范圍寬度
if (this.getFrame() == 4 && this.imgWeapon != null)
wcw += this.weaponIdx > 3 ? 59 : 43;
//判斷左右,計算攻擊范圍x位置位移
wcx = (1 & prePlayerState) != 0 ? (24-wcw) : 29;
//設置供給范圍
defineCollisionRectangle(wcx, arrayTemp[1], wcw,
arrayTemp[3]);
if (collidesWith(npcTemp))
{
npcTemp.npcState = 16 + (1 & npcTemp.npcState);
if(npcTemp.id==3)
npcTemp.hp -= data.getBossKind()[npcTemp.littleId][4];
else
npcTemp.hp -= data.getNpcKind()[npcTemp.littleId][4];
//npcTemp
npcTemp.x += (1 & npcTemp.npcState) == 0 ? -20
: 20;
}
}
break;
//與云層相碰
case 1:
if ((16 & prePlayerState) == 0)
break;
if (x + 26 > npcTemp.x
&& x + 26 < npcTemp.x + npcTemp.srcFrameWidth
&& y + 54 > npcTemp.y
&& y + 54 < npcTemp.y + npcTemp.srcFrameHeight
&& cloudIdx == -1)
{
playerState = 2 | (1 & prePlayerState);
cloudIdx = npcTemp.num;
int dY = y + srcFrameHeight - npcTemp.y - 10;
WestGameCanvas.mapY += dY;
for (int j = npc.npc.length; --j >= 0;)
if (null != npc.npc[j])
npc.npc[j].y += dY;
}
else
{
if (cloudIdx == npcTemp.num)
cloudIdx = -1;
}
break;
//與道具相碰撞
case 2:
collectFram = frameSequence[getFrame()];
arrayTemp = data.getPlayerRec()[collectFram];
defineCollisionRectangle(arrayTemp[0], arrayTemp[1],
arrayTemp[2], arrayTemp[3]);
if (collidesWith(npcTemp))
{
npcTemp.visible = false;
switch (npcTemp.littleId)
{
case 0:
WestGameCanvas.hp += 20;
break;
case 1:
WestGameCanvas.hp += 50;
break;
case 2:
WestGameCanvas.hp += 100;
break;
}
if (WestGameCanvas.hp > 100)
WestGameCanvas.hp = 100;
}
break;
//TODO boss coll
case 3:
if ((1886 & prePlayerState) == 0)
break;
collectFram = npcTemp.frameSequence[npcTemp.getFrame()];
arrayTemp = data.BossFrame(npcTemp.id)[collectFram];
npcTemp.defineCollisionRectangle(arrayTemp[0],
arrayTemp[1], arrayTemp[2], arrayTemp[3]);
int stoneIdx;
for (stoneIdx = npc.npc.length; --stoneIdx >= 0;)
{
if (null != npc.npc[stoneIdx]
&& npc.npc[stoneIdx].id == 4)
break;
}
if (stoneIdx >= 0
&& (npc.npc[stoneIdx].npcState & 8) != 0)
{
if (npcTemp.collidesWith(npc.npc[stoneIdx]))
{
int space = 1 & npcTemp.npcState;
npcTemp.npcState = space | 32;
space = space == 0 ? -5 : 5;
npcTemp.x += space;
npcTemp.hp -= data.getBossKind()[npcTemp.littleId][4];
npc.npc[stoneIdx].npcState = 2;
npc.npc[stoneIdx].x += space;
npc.npc[stoneIdx].y = data.getNpcPosition()[npc.npc[stoneIdx].num][3]
+ WestGameCanvas.mapY;
return;
}
}
switch (collectFram)
{
case 4:
case 5:
case 13:
case 14:
collectFram = frameSequence[getFrame()];
arrayTemp = data.getPlayerRec()[collectFram];
defineCollisionRectangle(arrayTemp[0],
arrayTemp[1], arrayTemp[2],
arrayTemp[3]);
if (collidesWith(npcTemp))
{
playerState = 128 + (1 & prePlayerState);
WestGameCanvas.hp -= data.getBossKind()[npcTemp.littleId][5];
if (stoneIdx >= 0
&& (prePlayerState & 768) != 0)
{
npc.npc[stoneIdx].npcState = 2;
npc.npc[stoneIdx].y = data
.getNpcPosition()[npc.npc[stoneIdx].num][3]
+ WestGameCanvas.mapY;
}
}
defineCollisionRectangle(0, 0, srcFrameWidth,
srcFrameHeight);
break;
}
break;
}
}
}
defineCollisionRectangle(0, 0, srcFrameWidth, srcFrameHeight);
}
/**
* 設置最后的動畫序列
*
*/
private void setFinalSequence(boolean isChangeBack)
{
if (playerState != prePlayerState || isChangeBack)
{
boolean isChangeDir = false;
if ((1 & playerState) != (1 & prePlayerState))
{
isChangeDir = true;
}
int question;//有問題: 當由左下跳的狀態到左站立的狀態變化時此處判斷不起作用
if ((65471 & playerState) != (65471 & prePlayerState)
|| isChangeBack)
{
switch (65471 & playerState)
{
case 2:
case 3:
prePlayerState = (65471 & playerState)
+ (64 & prePlayerState);
if ((64 & playerState) == 0)
setCurrSequence(data.getPlayer()[24], data
.getPlayer()[25]);
speedX = speedY = mark = 0;
break;
case 4:
case 5:
if ((70 & prePlayerState) != 0)
{
prePlayerState = (65471 & playerState)
+ (64 & prePlayerState);
if (!isChangeBack)
{
speedX = data.getPlayer()[5];
speedY = mark = 0;
if ((1 & prePlayerState) == 1)
{
speedX = -speedX;
}
}
if ((64 & prePlayerState) == 0)
setCurrSequence(data.getPlayer()[18], data
.getPlayer()[19]);
}
break;
case 8:
case 9:
if ((2118 & prePlayerState) != 0)
{
if (!isChangeBack)
{
mark = 0;
}
prePlayerState = (65471 & playerState)
+ (64 & prePlayerState);
if ((64 & playerState) == 0)
setCurrSequence(data.getPlayer()[8], data
.getPlayer()[9]);
if ((1 & prePlayerState) == 1)
{
speedX = -speedX;
}
}
break;
case 16:
case 17:
if ((318 & prePlayerState) != 0)
{
prePlayerState = (65471 & playerState)
+ (64 & prePlayerState);
if ((64 & playerState) == 0)
setCurrSequence(data.getPlayer()[10], data
.getPlayer()[11]);
mark = data.playerJump()[0].length - 1;
}
break;
case 32:
case 33:
setCurrSequence(data.getPlayer()[26],
data.getPlayer()[27]);
mark = 0;
prePlayerState = playerState;
speedX = speedY = 0;
break;
case 128:
case 129:
if ((3934 & prePlayerState) != 0)
{
prePlayerState = 128 + (1 & prePlayerState);
speedX = 0;
setCurrSequence(data.getPlayer()[14], data
.getPlayer()[15]);
mark = 5;
}
break;
case 256:
case 257:
if ((582 & prePlayerState) != 0)
{
prePlayerState = playerState;
speedX = 0;
setCurrSequence(data.getPlayer()[12], data
.getPlayer()[13]);
}
break;
case 512:
case 513:
prePlayerState = playerState;
speedX = data.getPlayer()[5];
if (prePlayerState == 513)
{
speedX = -speedX;
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -