我有一个使用两个不同点移动位图的函数,一个用于当前位置,一个用于“目标”位置,这样我检查当前位置x \ y是否小于或大于目标位置把它移向它。
这就是我在代码中所做的:
public void fly(float x1,float y1,float scale){
flyTo.x=(int)x1;
flyTo.y=(int)y1;
mCurrentState=BossState.Flying;
}
并在更新时:
private void UpdateAll(){
switch (mCurrentState) {
case Flying:
if(flyTo.x==position.x&&flyTo.y==position.y){
mCurrentState=BossState.Normal;
}
else{
if(flyTo.x>position.x){
position.x+=speed;
wiggleTo.x+=speed;
}
else if(flyTo.x<position.x){
position.x-=speed;
wiggleTo.x-=speed;
}
if(flyTo.y>position.y){
position.y+=speed;
wiggleTo.y+=speed;
}
else if(flyTo.y<position.y){
position.y-=speed;
wiggleTo.y-=speed;
}
}
break;
这非常有效,但是现在我使位图摆动\摇动,我用自定义的点数组完成了这一点,并且对于每个点我调用了fly函数并将位图移向了。这也很有效,并使位图摆动。但问题出现了:连接摆动和飞行功能,我希望能够移动已经移动的位图。
我尝试为摆动创建另一个点,并通过这样做创建自己的函数:
public void wigglefly(float x1,float y1,float scale){
wiggleTo.x=position.x+(int)x1;
wiggleTo.y=position.y+(int)y1;
}
并在更新时:
if(wiggleTo.x==position.x&&wiggleTo.y==position.y){
}
else{
if(wiggleTo.x>position.x){
position.x+=speed;
}
else if(wiggleTo.x<position.x){
position.x-=speed;
}
if(wiggleTo.y>position.y){
position.y+=speed;
}
else if(wiggleTo.y<position.y){
position.y-=speed;
}
}
也是为了飞行我也摇摆了,
case Flying:
if(flyTo.x==position.x&&flyTo.y==position.y){
mCurrentState=BossState.Normal;
}
else{
if(flyTo.x>position.x){
position.x+=speed;
wiggleTo.x+=speed;
}
else if(flyTo.x<position.x){
position.x-=speed;
wiggleTo.x-=speed;
}
if(flyTo.y>position.y){
position.y+=speed;
wiggleTo.y+=speed;
}
else if(flyTo.y<position.y){
position.y-=speed;
wiggleTo.y-=speed;
}
}
但是会发生的是位图飞向我称之为怪异的点,一旦它到达目标点,位图就会停止移动并且不会摆动\抖动。