0

こんにちは、マインクラフトのソースコードに基づいたマインクラフトのボットに取り組んでおり、フライ・トゥ・ブロック・メソッドを作成する必要がありました...しかし、私のメソッドは不具合を起こしているようで、その理由がわかりません。何か不足していますか?(あいまいな命名について申し訳ありません。ローカルは、関数に対してローカルな値であることを意味し、ローカル ベクトルは実際には配列に格納されます)

private void flyTo(int x, int y, int z,double posX,double posY,double posZ) {
    double xLocal = posX;
    double yLocal = posY;
    double zLocal = posZ;
    while(xLocal!=x &&yLocal!=y&&zLocal!=z){
        double[] v = new double[3];
        v[0] = x-xLocal;
        v[1] = y-yLocal;
        v[2] = z-zLocal;
        double magxz = Math.sqrt(Math.pow(v[0], 2)+Math.pow(v[2], 2));
        if(magxz>0.6D){
            double scaler = 0.6D/magxz;
            v[0] *= scaler;
            v[2] *= scaler;
        }
        if(Math.abs(v[1])>1){
            if(v[1]>0){
                v[1]=1;
            }else{
                v[1]=-1;
            }
        }
        xLocal+=v[0];
        yLocal+=v[1];
        zLocal+=v[2];
        mc.getSendQueue().addToSendQueue(new Packet11PlayerPosition((double)xLocal,(double)yLocal,yLocal+0.83,(double)zLocal,false));
        mc.getSendQueue().processReadPackets();
        try {
            Thread.sleep(500);
        } catch (InterruptedException e) {
        }
    }
}
4

1 に答える 1

1

vこれ以上の情報がなければ、方向ベクトルのように見えるので、私が提案できる唯一のことは を正規化することです。

v[0] = x-xLocal;
v[1] = y-yLocal;
v[2] = z-zLocal;

double mag = Math.sqrt(Math.pow(v[0], 2) + Math.pow(v[1], 2) + Math.pow(v[2], 2));

v[0] /= mag;
v[1] /= mag;
v[2] /= mag;
于 2012-08-21T03:56:19.783 に答える