অদৃশ্য হওয়ার কাছাকাছি যাওয়ার সাথে সাথে আমি কীভাবে আরও ঘন ঘন ফ্ল্যাশ / জ্বলজ্বল করব?


10

আমার খেলায় আপনি যখন কোনও শত্রুকে হত্যা করেন তারা হেলথ প্যাক বা সোনার মতো কিছু ফেলে দিতে পারে। আমি এটির একটি সময়সীমা রাখতে চাই যাতে এটি শেষ না করে অবশেষে অদৃশ্য হয়ে যায়। আমি আইটেমটি আরও ঘন ঘন ফ্ল্যাশ করতে চাই ড্রপটি "মৃত্যুর" কাছে চলে আসে। আপনি কীভাবে "বেশি ঘন ঘন ঝলকানি" অ্যালগরিদম করবেন?

উত্তর:


2

বর্তমানে প্রদত্ত যে কোনও পদ্ধতির সাথে আমার উদ্বেগটি হ'ল তারা উভয়ই 'পরিবর্তনশীল গতি' জ্বলজ্বলে বাড়ে, যা কেবল খেলোয়াড়দের জন্যই বিভ্রান্তিকর হতে পারে না তবে কোনও বস্তুটি বিলুপ্ত হওয়ার আগে ঠিক কতক্ষণ চলে গেছে তা অনুমান করাও কঠিন করে তোলে । পরিবর্তে, আপনার পরামিতি কোথাও (কিনা তারা রেন্ডারার জন্য অথবা একটি প্রতি-বস্তুর ভিত্তিতে বৈশ্বিক হতে) আমি চার ধ্রুবক প্রয়োগ করা হবে: slowBlinkTime, slowBlinkRate, fastBlinkTimeএবং fastBlinkRate। রেন্ডারিংয়ের সময়, যদি আপনার অবজেক্টের অবশিষ্ট জীবন কম হয় fastBlinkTime, তবে এটিকে ঝাপটান fastBlinkRate; অন্যথায় যদি এটি এর চেয়ে কম হয় তবে এটিকে slowBlinkTimeঝাপটান slowBlinkRate। আপনি যদি আরও একধাপ এগিয়ে যেতে চান তবে আপনার আলাদা আলাদা অ্যারে থাকতে পারে blinkTimeএবংblinkRateগুলি এবং সেগুলি একে একে পরীক্ষা করে দেখুন, তবে বাস্তবে এটি অতিরিক্ত ওভারকিল হওয়ার সম্ভাবনা রয়েছে এবং কেবলমাত্র 'সতর্কতা' এবং 'সমালোচনামূলক' রাষ্ট্র থাকা যথেষ্ট। কোডটি এরকম কিছু দেখাচ্ছে:

float blinkCycle;
if ( entity.timeLeft < fastBlinkTime ) {
  blinkCycle = entity.timeLeft/fastBlinkRate;
} else if ( entity.timeLeft < slowBlinkTime ) {
  blinkCycle = entity.timeLeft/slowBlinkRate;
}
blinkCycle = blinkCycle - floor(blinkCycle); // find blinkCycle 'mod 1'
if ( (entity.timeLeft < slowBlinkTime) && (blinkCycle < 0.5f) ) {
  renderBlinked(entity); // this should be the 'blinked' state, whether flashed or missing
} else {
  renderNormal(entity); // the normal render for the entity
}

নোট করুন যে এই কোডটি অর্ধ-অন, অর্ধ-অফ জ্বলজ্বল চক্র (যা 0.5fটেস্টে উপস্থাপিত তা বোঝায়), তবে কেবল যথাযথ ধ্রুবকটিকে টিকিয়ে রেখে এক-তৃতীয়াংশের মতো সহজেই দুই-তৃতীয়াংশের মতো কিছু জন্য খুব সহজেই চিহ্নিত করা যেতে পারে। এটি দ্রুত এবং ধীর অবস্থার মধ্যে জ্বলজ্বলে 'সিঙ্ক্রোনাইজ' করার জন্য কিছু করে না, তবে এটি তুলনামূলকভাবে সরল।

এটি প্লাগ ইন করা সহজবোধ্য হওয়া উচিত, এবং এতে আইএমএইচওর যথেষ্ট সুবিধা হবে যে খেলোয়াড়রা 'স্লো' থেকে 'দ্রুত' জ্বলজ্বল করতে স্যুইচটি দেখতে সক্ষম হবে এবং ঠিক কতক্ষণ বাকি আছে তা জানতে পারবে। আমি প্যারামিটার মানগুলি দিয়ে 5s slowBlinkTimeএবং 0.5 এর জন্য slowBlinkRateএবং 2s / 0.25 এর জন্য fastBlinkTimeএবং সেগুলি fastBlinkRateদিয়ে শুরু করব, তবে এটি অবশ্যই আপনার নির্দিষ্ট গেমের উপর নির্ভরশীল।


আমি বুঝতে পারছি না। যদি জ্বলজ্বলে দ্রুত এবং দ্রুত হয়ে যায়, ঠিক 2 মোডের চেয়ে অবজেক্টটি কতক্ষণ ফেলেছে ঠিক তার চেয়ে আরও ভাল গেজ হবে না?
ড্যানিয়েল ক্যাপলান

1
@ টিটিওয়াইটি সমস্যাটি হ'ল, বিশেষত যখন ঝলকানোর হার পরিবর্তনশীল হয় তবে ব্যবহারকারীদের পক্ষে (ক) কোন বস্তুটি কতটা দ্রুত জ্বলজ্বল করছে তা নির্ধারণ করা কঠিন, এবং (খ) আর কতক্ষণ বেঁচে থাকতে হবে তার সাথে এটি সম্পর্কযুক্ত। 0 থেকে 50 বনাম একটি স্লাইডার থাকার কল্পনা করুন 0 0, 50 এবং 100 এ পজিশন সহ একটি 'সুইচ'; লোকেরা স্লাইডারের মূল্য 5-10% এর মধ্যে অনুমান করতে সক্ষম হতে পারে তবে তারা সুইচটি ঠিক কী মূল্য জানতে পারে - এবং অবস্থানের চেয়ে হার নির্ধারণ করা আরও শক্ত।
স্টিভেন স্টাডনিকি 18

ভোটগুলি যা বোঝায় তা সত্ত্বেও, আমি মনে করি এটি সেরা উত্তর। তদতিরিক্ত, এটি কার্যকর করার উপায় (কমপক্ষে ধারণাগতভাবে)। আমার উত্তরটি আরও বেশি ভোট পেয়েছে, তবে আমি এখনও দৃষ্টিভঙ্গিতে এ নিয়ে সন্তুষ্ট নই। আপনার পদ্ধতির একটি সন্তোষজনক চেহারা দিতে হবে।
ড্যানিয়েল ক্যাপলান

14

যদি টি টি থেকে 0 এ চলে যায় তবে আপনি পাপের মতো কিছু ব্যবহার করতে পারেন ((টি - টি) then) তারপরে সংখ্যাটি যদি 0 হয় তবে আপনি বস্তুটি আঁকেন, যদি এটি <0 হয় না তবে


আমি নিজে চেষ্টা করে এসেছি এবং আমাকে এটির সাথে টিঙ্কার করতে হয়েছিল। আমার জন্য টি 100 ছিল This এই সমীকরণটি পুরো সময়টিকে দ্রুত ঝিমঝিম করে। সুতরাং এটি ধীর করতে, আমি সমীকরণটিকে পাপ (((টি - টি) / 10) changed) এ পরিবর্তন করেছি। এটি ছিল / 6 এবং / 7 এর মতো সংখ্যার সাথে চারপাশে ঝাঁকুনির পরে।

আমি এটিও চেষ্টা করেছি: পাপ ((টি - টি) ² * 1/100)

এবং তারপরে আমি ড্রপটিকে প্রায় অদৃশ্য বলে মনে হয়েছিল যতটা দৃশ্যমান। আমি চেয়েছিলাম এটি খুব কমই অদৃশ্য হোক। আমি এটি করে এটি সম্পাদন করেছি: sin ((T - t) ² * 1/100) + .5 + + 5 সাইনকে "রেখা" উপরে স্থানান্তরিত করে যাতে এটি প্রায়শই <0 না হয়ে যায়।

এগুলির কোনওটিই ঠিক আমার ইচ্ছা মতো কাজ করেনি। সমস্যাটি হ'ল খুব দ্রুতই ঝলকানি শুরু হবে। আমি চেয়েছিলাম যে ড্রপটি 3 সেকেন্ডের জন্য দৃশ্যমান হয় এবং তারপরে ঝলকানো শুরু হয়। এটি সম্পাদন করার জন্য, আমি এরকম কিছু করেছি:

isVisible(drop)
  if drop.t > x
    return true
  else
    sin((T - x - drop.t * 1/100) + .5 >= 0

এটি xহবে 3 সেকেন্ড।

এছাড়াও লক্ষণীয় বিষয় হ'ল এই সরঞ্জামটি আমি পুরো সময়টি জ্বলজ্বলে দেখতে কেমন দেখতে ভিজ্যুয়ালাইজ করতে ব্যবহার করি। আমি মনে করি ভিজ্যুয়াল সরঞ্জামটি ছাড়াই এটি 5x বেশি সময় নিয়েছে।


আশ্চর্যজনক, আমি এই সমাধানটি পছন্দ করি, অন্য একটি দ্রুত উপায় হচ্ছেsin(t * pow((t/T), 1.5))
গুস্তাভো ম্যাকিয়েল

4

অন্য ভেরিয়েবলের সাহায্যে হতে পারে?

current_length = 4
length_decrease = 0.5
current_time = current_length

function update(delta_time)
    if current_time > 0 then
        draw()
    end
    current_time -= delta_time
    if current_time < -current_length then
        current_length -= length_decrease -- feel free to get creative here
        if current_length < 0 then
            disable_object()
        end
        current_time += current_length * 2
    end
end

আপনি নিজেকে প্রস্তাবিত সমাধানের তুলনায় এটি আরও দীর্ঘতর, তবে আপনি নিজেকে ব্যয়বহুল sinএবং powপরিচালনাগুলি সংরক্ষণ করেন এবং কীভাবে ঝলকানো দ্রুত যায় তার উপর আপনার আরও অনেক নিয়ন্ত্রণ থাকে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.