Динамическое добавление и удаление представлений в Android?

Как говорит Клетус, вы хотите использовать сумму радиусов двух шаров. Вы хотите вычислить общее расстояние между центрами шаров следующим образом:

Ball 1:  center: p1=(x1,y1)  radius: r1
Ball 2:  center: p2=(x2,y2)  radius: r2

collision distance: R= r1 + r2
actual distance:    r12= sqrt( (x2-x1)^2 + (y2-y2)^2 )

Столкновение будет происходить всякий раз, когда (r12 < R). Как говорит Артелий, на самом деле они не должны сталкиваться по осям X / Y, они сталкиваются под определенным углом. За исключением того, что вы на самом деле не хотите этого угла; Вы хотите вектор столкновения. Это разница между центрами двух окружностей, когда они сталкиваются:

collision vector: d12= (x2-x1,y2-y1) = (dx,dy)
actual distance:  r12= sqrt( dx*dx + dy*dy )

Обратите внимание, что вы уже вычислили dx и dy выше при расчете фактического расстояния, так что вы могли бы также отслеживать их для цели как это. Вы можете использовать этот вектор столкновений для определения новой скорости шаров - в конечном итоге вы масштабируете вектор столкновений по некоторым факторам и добавляете это к старым скоростям ... но, чтобы вернуться к фактическому столкновению Точка:

collision point:  pcollision= ( (x1*r2+x2*r1)/(r1+r2), (y1*r2+y2*r1)/(r1+r2) )

Чтобы выяснить, как найти новую скорость шариков (и вообще, чтобы иметь больше смысла из всей ситуации), вы, вероятно, должны найти книгу по физике для средней школы, или эквивалент. К сожалению, я не знаю хорошего веб-учебника - предложения, кто-нибудь?

О, и если все еще хотите придерживаться вещи оси x / y, я думаю, что вы правильно поняли:

if( abs(dx) > abs(dy) ) then { x-axis } else { y-axis }

Что касается того, почему он может потерпеть неудачу, трудно сказать без дополнительной информации, но у вас могут быть проблемы с тем, что ваши шары движутся слишком быстро и проходят мимо друг друга за один шаг. Есть способы решить эту проблему, но самый простой способ - убедиться, что они не двигаются слишком быстро ...

117
задан Nikolai Samteladze 28 October 2012 в 06:21
поделиться

2 ответа

Привет. Вы можете попробовать этот способ, добавив относительное расположение, а затем добавьте текстовое представление.

LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(
            (LayoutParams.WRAP_CONTENT), (LayoutParams.WRAP_CONTENT));

RelativeLayout relative = new RelativeLayout(getApplicationContext());
relative.setLayoutParams(lp);

TextView tv = new TextView(getApplicationContext());
tv.setLayoutParams(lp);

EditText edittv = new EditText(getApplicationContext());
edittv.setLayoutParams(lp);

relative.addView(tv);
relative.addView(edittv);
6
ответ дан 24 November 2019 в 02:05
поделиться

Просто используйте myView.setVisibility(View.GONE);, чтобы полностью удалить его. Но если вы хотите зарезервировать занятое пространство внутри родительского пространства, используйте myView.setVisibility(View.INVISIBLE);

4
ответ дан 24 November 2019 в 02:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: