যদি আপনি কোনও বিস্ফোরণ থেকে বিচারক স্ক্রিনের কাঁপুনিটির কথা উল্লেখ করছেন, আমি আমার প্রোটোটাইপ গেমটিতে এটি প্রয়োগ করার চেষ্টা করেছি (এটি 2 ডি তবে এটি 3 ডি তে বেশ ভাল অনুবাদ করা উচিত, আমি আশা করি)। কটাক্ষপাত ইউটিউব ভিডিও এবং দেখ যে যদি কি আপনি যা খুঁজছেন নেই - 1:35 সম্পর্কে বন্ধ পর্দা শেক কিক
যাইহোক, আমি যেভাবে এটি অর্জন করেছি তা হল দৃশ্যের জন্য ভিউপোর্ট তৈরি করা এবং কেন্দ্র পয়েন্ট ( centre
))
যখন একটি বিস্ফোরণ শুরু হয়, আমি radius
rand 30px এর এলোমেলো তৈরি করি । আমি তখন centre
এলোমেলো দিকের এই বহু পিক্সেল দ্বারা ভিউপোর্টটি অফসেট করি ।
প্রতিটি পরবর্তী আপডেটের জন্য (স্ক্রিনে টানার মাঝে), আমি radius
10-20% কমিয়ে দিয়ে centre
আবার অনেকগুলি পিক্সেল দিয়ে ভিউপোর্টটি অফসেট করি । যাইহোক, এই অফসেটের জন্য এলোমেলো কোণটি বাছাইয়ের পরিবর্তে আমি পূর্বের ভিউপোর্ট কোণটি থেকে এনে centre
180 +/- 60 ডিগ্রি যুক্ত করেছি।
সুতরাং মূলত, প্রতিটি আপডেট (বা 10-20 মিমি বা তাই), আমি centre
স্ক্রিনের থেকে হ্রাসমান পিক্সেল দ্বারা ভিউপোর্টটি অফসেট করি ।
এখানে কিছু সিউডোকোড:
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
}
আমি যখন ব্যাসার্ধটি ২.০ এর চেয়ে কম হয় তখন আমি পর্দা কাঁপানো বন্ধ করি, আমি যে স্থানে ভিউপোর্টটি পুনরায় সেট করি centre
।