আমি এখানে চলাচলে আরও দুটি থ্রেড পড়েছি: সময় ভিত্তিক আন্দোলন বনাম ফ্রেমের হার ভিত্তিক আন্দোলন? , এবং কখন আমার একটি স্থির বা পরিবর্তনশীল সময়ের পদক্ষেপ ব্যবহার করা উচিত?
তবে আমার মনে হয় আমি ফ্রেম স্বতন্ত্র আন্দোলনের একটি প্রাথমিক বোঝার অভাব বোধ করছি কারণ এই থ্রেডগুলির মধ্যে কোনওটি কী বলছে তা আমি বুঝতে পারি না।
আমি অলসফির এসডিএল টিউটোরিয়ালগুলি অনুসরণ করছি এবং ফ্রেমের স্বাধীন পাঠের উপরে এসেছি। http://lazyfoo.net/SDL_tutorials/lesson32/index.php
আমি কোডের আন্দোলনের অংশটি কী বলার চেষ্টা করছে তা নিশ্চিত নই তবে আমি মনে করি এটি এটি (আমি ভুল হলে দয়া করে আমাকে সংশোধন করুন): ফ্রেমের স্বাধীন আন্দোলন করতে গেলে আমাদের কোনও বস্তুর কতদূর খুঁজে বের করতে হবে ( উদাহরণস্বরূপ স্প্রাইট) একটি নির্দিষ্ট সময়সীমার মধ্যে চলে আসে, উদাহরণস্বরূপ 1 সেকেন্ড। যদি বিন্দুটি প্রতি সেকেন্ডে 200 পিক্সেলে চলে যায়, তবে আমার এটি হিসাব করতে হবে যে এটি দ্বিতীয় সেকেন্ডের মধ্যে 1/2000 দ্বারা 200 পিপিএস গুণ করে সেই সেকেন্ডের মধ্যে কতটা সরে যায়।
এটা কি সঠিক? পাঠ বলেছেন:
"সেকেন্ডে শেষ ফ্রেম থেকে পিক্সেল প্রতি সেকেন্ডে * সময় * বেগ। সুতরাং যদি প্রোগ্রামটি প্রতি সেকেন্ডে 200 ফ্রেমে চলে: 200 পিপিএস * 1/200 সেকেন্ড = 1 পিক্সেল"
তবে ... আমি ভেবেছিলাম যে আমরা 200 পিপিএস এক সেকেন্ডের 1/1000 ম দ্বারা গুন করছি। প্রতি সেকেন্ডে ফ্রেম নিয়ে এই ব্যবসাটি কী?
ফ্রেম স্বাধীন আন্দোলন কীভাবে কাজ করে সে সম্পর্কে যদি কেউ আমাকে আরও কিছুটা বিশদ ব্যাখ্যা দিতে পারে তবে আমি প্রশংসা করব।
ধন্যবাদ.
সংযোজন:
SDL_Rect posRect;
posRect.x = 0;
posRect.y = 0;
float y, yVel;
y = 0;
yVel = 0;
Uint32 startTicks = SDL_GetTicks();
bool quit = false;
SDL_Event gEvent;
while ( quit == false )
{
while ( SDL_PollEvent( &gEvent ) )
{
if ( gEvent.type == SDL_QUIT )
quit = true;
}
if ( y <= 580 )
{
yVel += DOT_VEL;
y += (yVel * (SDL_GetTicks() - startTicks)/1000.f);
posRect.y = (int)y;
}
startTicks = SDL_GetTicks();
SDL_BlitSurface( bg, NULL, screen, NULL );
SDL_BlitSurface( dot, NULL, screen, &posRect );
SDL_Flip( screen );
}
এই কোডটি স্ক্রিনের নীচে একটি বিন্দু সরিয়ে দেয়। আমি মনে করি আমার এখন পর্যন্ত সবকিছু ঠিক আছে। এটি পর্দার নীচে সরানো হয় কিন্তু একটি বিচিত্র জিনিসটি ঘটে যা ঘটে যা আমি ব্যাখ্যা করতে পারি না। বিন্দুটি যখন y- মানের থেকে বেশি হয় তখন y = 580 এ থাকার কথা। যাইহোক, আমি যখনই প্রোগ্রামটি চালাচ্ছি, বিন্দুটি অন্য কোনও স্থানে শেষ হবে, যার অর্থ সামান্য কিছুটা 580 এরও বেশি হবে, সুতরাং বিন্দুটি অর্ধেক বা পর্দার বাইরে অর্ধেকেরও বেশি (বিন্দুটি 20 পিক্সেল, পর্দা মাত্রা 800x600)। আমি যদি প্রোগ্রামটির শিরোনাম-বারটি ক্লিক করে ধরে রাখার মতো কিছু করি এবং তারপরে ছেড়ে দিই, ডটটি স্ক্রিন থেকে অদৃশ্য হয়ে যাবে। এটি প্রতিবার কীভাবে পরিবর্তনশীল? শিরোনামবার সমস্যা হিসাবে আমার মনে হয় কারণ এটি যখন আমি শিরোনামবারে ধরে থাকি তখন টাইমারটি এখনও চলমান থাকে এবং সময় অতিবাহিত হয় আরও বড় হয়ে যায়, ফলে পরবর্তী ফ্রেমে বিন্দুটি আরও বেশি দূরত্বে চলে যায়। এটা কি সঠিক?
yMovement = (yVel * (SDL_GetTicks() - startTicks)/1000.f);
তারপরে করুন:if(y + yMovement <= 580){ y += yMovement; } else { y = 580; }