2016-11-18 2 views
0

Привет, я успешно обработал чайник Юты в OpenlGL ES 2.0. В настоящее время я пытаюсь реализовать сенсорные события, чтобы всякий раз, когда я касался чайника, он взорвался.Android Explosion внедрения OpenGL ES

Мой вопрос: где я должен реализовать событие touch в классе Renderer или в GLSurfaceView? и как я могу заставить чайник взорваться. Заранее спасибо. Я новичок в Android Любое предложение высоко ценится

ответ

0

О сенсорном события:

Вы должны были бы показать систему/архитектуру вы сейчас имеете. Как правило, у вас будет отдельный класс, который контролирует сцену. В вашем случае у вас может быть только один объект, содержащий чайник и все его значения, необходимые для рисования или перемещения или взорвания ... Таким образом, этот класс должен быть инициализирован и принадлежит поверхностному представлению или его родительскому объекту. В обоих случаях вид поверхности будет иметь доступ к сцене. Теперь, если я полагаю, что рендеринг отвечает за рисование, то поверхностный вид является владельцем средства визуализации и вызывает что-то похожее на this.myRenderer.drawScene(this.myScene), или если средство визуализации имеет элемент управления инициализацией ниши, тогда поверхностное представление должно перенаправить доступ к сцене, чтобы this.myRenderer.setScene(this.myScene). Таким образом, в конце оба класса имеют доступ к сцене и вместе с ним к предмету чайника.

Теперь, чтобы обработать событие касания, вам нужно будет проверить, какое ближайшее место вы можете перехватить событие касания. Если представление поверхности может перехватить эти вызовы, тогда реализуйте его. Если нет, я уверен, что владелец вида поверхности может, в этом случае владелец позвонит this.mySurfaceView.handleTouchEvent(touch).

Теперь вид поверхности может по желанию выполнить некоторые проверки, чтобы проверить, попал ли банк и начался процесс взрыва. Это может быть так же просто, как вызов метода только на чайник, например this.myScene.teapotObject.explode().

О самом взрыве:

Есть много способов, как взорвать объект и вообще ни один из них легко. Минимум, скорее всего, будет иметь систему, в которой ваш буфер вершин будет разделен на более мелкие куски, где каждый из фрагментов затем анимируется при анимации во время взрыва.

Даже создание анимации может быть сложной процедурой. Один из способов - создать интерполяцию, где у вас будет время начала анимации startTimeStamp, его duration, начальная позиция объекта startPosition и конечная позиция объекта endPosition. Затем текущая позиция извлекается currentPosition = startPosition + (endPosition -startPosition)*(startTimeStamp-currentTimeStamp)/duration. Другой способ - реализовать физику, в которой объект будет перемещаться по каждому кадру. В этом случае вы определяете объекты speed, а затем на каждый кадр, который вы бы назвали teapot.chunk.move(1.0/60.0), который затем выполнил бы this.position += this.speed*dt. Затем вы можете добавить гравитацию для управления скоростью или столкновениями ...

+0

Большое спасибо @Matic. –