Patlamadan gelen bu titrek perde sallanmasından bahsediyorsanız, prototip oyunumda bunu uygulamaya çalıştım (2d ama oldukça iyi bir şekilde 3d'ye çevirmeli, bence). Youtube videosuna bir göz atın ve aradığınız şey olup olmadığına bakın - ekran sarsıntısı yaklaşık 1:35
Her neyse, elde ettiğim yol, sceen için bir bakış açısı oluşturmak ve merkez noktayı ( centre
) depolamaktı .
Bir patlama başladığında radius
, ~ 30px'lik bir rasgele yaratırım . Daha sonra görüntüleme centre
çerçevesini bu kadar pikselden rasgele bir yönde kaydırdım.
Daha sonraki her güncelleme için (ekrana çizme arasında), radius
% 10-20 oranında azaltıyorum ve görüntü alanını centre
tekrar bu kadar piksel kadar dengeliyorum. Bununla birlikte, bu sapma için rastgele bir açı seçmek yerine, önceki bakış açısı açısını alıp centre
180 +/- 60 derece ekledim.
Temel olarak, her güncelleme (veya 10-20ms ya da öylesine), centre
ekran penceresinden azalan sayıda pikselle görünümünüzü dengeliyorum .
İşte bazı sahte kod:
viewportCentre = (400,300) //Lets say screen size is 800 x 600
radius = 30.0
randomAngle = rand()%360
offset = ( sin(randomAngle) * radius , cos(randomAngle) * radius) //create offset 2d vector
viewport.setCentre(viewportCentre + offset) // set centre of viewport
draw()
while(true) //update about every 10-20ms
{
radius *=0.9 //diminish radius each frame
randomAngle +=(180 +\- rand()%60) //pick new angle
offset = (sin(randomAngle) * radius , cos(randomAngle) * radius) //create offset 2d vector
viewport.setCentre(viewportCentre + offset) //set centre of viewport
draw() //redraw
}
Yarıçap 2.0 değerinin altına düştüğünde genellikle ekran titremesini durdururum, bu noktada görüntü portunu tekrar sıfırlarım centre
.