Я строю игру для андроида, в которой объекты случайно попадают с любой стороны экрана к спрайту в середине экрана.Когда кто-то передает путевой провод по центральному спрайту, он обрабатывается моим обнаружением столкновений, которое устанавливает координаты объектов противника где-то за пределами экрана, что желательно, но, как это происходит в моем методе updatePhysics (), когда мы возвращаемся к doDraw() метод холст перерисовал в пустое состояние (т.е. без каких-либо вражеских объектов на нем).Любые объекты, которые были на экране и не сталкивались со спрайтом, также удаляются, а новые восстанавливаются.Почему он удаляет все вражеские объекты, а не просто обновляет положение оставшихся в игре на тот момент ???
Я включу свой код, чтобы сделать это проще для понимания.Это часть обнаружения коллизий моего updatePhysics ():
// COLLISION DETECTION
int n = 0,haveHidden = 0; //haveHidden is number of objects that are hidden in this current pass of CD
while(n < mCurrentDistractionsOnScreen){
switch(DistractionsArray[n].dGeneralDirection){
case LEFT_ORIGIN:
// If the X co-ordinate is past the edge of the performer sprite
if((DistractionsArray[n].ObjmX2 > LEFT_TRIPWIRE) && (DistractionsArray[n].ObjmX2 < RIGHT_TRIPWIRE))
{
mConcentration -= DistractionsArray[n].dDamageToInflict;
Log.w(this.getClass().getName(), "Object: " + n + "LEFT Damage: " + DistractionsArray[n].dDamageToInflict + " leaves " + mConcentration);
DistractionsArray[n].hideDistraction();
haveHidden++;
}
break;
case RIGHT_ORIGIN:
// If the X co-ordinate is past the edge of the performer sprite
if((DistractionsArray[n].ObjmX > LEFT_TRIPWIRE) && (DistractionsArray[n].ObjmX < RIGHT_TRIPWIRE))
{
mConcentration -= DistractionsArray[n].dDamageToInflict;
Log.w(this.getClass().getName(), "Object: " + n + "RIGHT Damage: " + DistractionsArray[n].dDamageToInflict + " leaves " + mConcentration);
DistractionsArray[n].hideDistraction();
haveHidden++;
}
break;
}
n++;
mCurrentDistractionsOnScreen -= haveHidden;
}
Это метод hideDistraction (), который является методом, определенным во внутреннем классе DistractionObjects в этом потоке (DistractionsArray состоит из этих объектов):
public void hideDistraction(){
// Set attributes to default
this.dName = "Default";
this.dVelocity = 0;
this.dMaxPoints = 10;
this.dDamageToInflict = 0;
this.dOrigin = 100;
this.dGestureRequired = "";
// Can be reused again
this.isUseable = true;
Log.w(getClass().getName(), "HIDING FROM: " + this.ObjmX + " " + this.ObjmY + " " + this.ObjmX2 + " " + this.ObjmY2 + " ");
// Position it off-screen
this.ObjmX = -150;
this.ObjmX2 = -150 + this.dDistractionObjectSprite1.getIntrinsicWidth();
this.ObjmY = -150;
this.ObjmY2 = -150 + this.dDistractionObjectSprite1.getIntrinsicHeight();
Log.w(getClass().getName(), "HIDING TO: " + this.ObjmX + " " + this.ObjmY + " " + this.ObjmX2 + " " + this.ObjmY2 + " ");
}
И метод doDraw начинается с canvas.save () и в конце выполняет canvas.restore.Чтобы отобразить мои объекты в их новом положении, он делает это:
// For each object in play, draw its new co-ordinates on the canvas
int n = 0;
while(n < mCurrentDistractionsOnScreen){
DistractionsArray[n].dDistractionObjectSprite1.setBounds((int)DistractionsArray[n].ObjmX,
(int)DistractionsArray[n].ObjmY,
(int)DistractionsArray[n].ObjmX2,
(int)DistractionsArray[n].ObjmY2);
DistractionsArray[n].dDistractionObjectSprite1.draw(canvas);
n++;
}
Я буквально лишен каких-либо идей сейчас, после того, как попробовал так много разных исправлений, даже попытался сериализовать положение этих других вражеских объектов на экране вцелочисленный массив, который перестраивается в физическом методе, но ничего не делается !!
Подводя итог, мне нужен способ скрыть вражеский объект за экраном, как в hideDistraction (), когда он проходит через триплет, но я хочу, чтобы вседругие объекты продолжат курс, поскольку они не перемещаются за пределы экрана и не перерисовываются с нуля.
Если вам нужна дополнительная информация, пожалуйста, спросите .... и, если можете, пожалуйста, помогите!
Большое спасибо