2 ডি হেলিকপ্টার খেলা, করিডোরের দেয়াল কিভাবে তৈরি করবেন?


12

আমি ক্লাসিক "হেলিকপ্টার" গেমটি (যেমন http://www.addictinggames.com/helicopter.html ) মানিয়ে নেওয়ার দিকে নজর দিচ্ছি , তবে দেয়াল-প্রজন্মের ইঞ্জিন কীভাবে তৈরি করব তা এখনও বুঝতে পারি নি।

সিউডোকোডে কোনও পয়েন্টার? আমি মাঝের বস্তুগুলিতে তেমন আগ্রহী নই - গেমটি এগিয়ে যাওয়ার সাথে সাথে কেবল এমনভাবে পার্শ্ব তৈরির পদ্ধতি যা ধীরে ধীরে বেড়ে যায় (আরও বেশি করে বন্ধ হয়, আরও অপ্রত্যাশিত বক্ররেখা থাকে)।


1
এছাড়াও- স্পষ্ট করার জন্য, আমার দেওয়ালগুলি ব্লকির চেয়ে বেশি বক্রাকার হওয়া দরকার, যেহেতু সেগুলি আসলে "জলের তরঙ্গ" হবে ...
ডেভিডকোমার

1
কেবল ব্লক হিসাবে করুন, তবে প্রতিটিটির মধ্যে মসৃণ সংযোগ স্থাপন করুন।
গুস্তাভো ম্যাকিয়েল

উত্তর:


17

আপনি এটির জন্য 1D পার্লিন শব্দটি ব্যবহার করতে পারেন । এখানে 2 ডি শব্দের একটি চিত্র। আমি রেড রেখাটি যেখানে স্যাম্পল নিয়েছি এবং সবুজ রেখা পেতে কিছু ধ্রুবক দিয়ে তাদের গুণিত করেছি।

1 ডি বিভাগ সহ 2 ডি শব্দ

আপনি যে ধ্রুবকটির সাথে মানগুলি গুণিত করছেন তা শব্দের উচ্চতা নির্ধারণ করতে চলেছে। সুতরাং আপনি সহজেই অসুবিধাটি শেষ করতে পারেন। পার্লিন শব্দের আরেকটি সুবিধা হ'ল এটি টাইলটেবল গোলমাল তৈরি করতে পারে, যাতে আপনি একটি আপাতদৃষ্টিতে অন্তহীন স্তরটি তৈরি করতে পারেন।

আপনি যদি নীচে এবং একটি সিলিং তৈরি করতে চান তবে এটি গুরুত্বপূর্ণ যে আপনি কোনও দুর্গম অঞ্চল তৈরি করবেন না। সবচেয়ে সহজ উপায় হ'ল শব্দের "উপরের" অংশটি (উদাহরণস্বরূপ 1.0 - noiseValue) সিলিং হিসাবে এবং নীচের অংশের ( noiseValue) অবশ্যই কিছু অংশের মধ্যে অবশ্যই অফসেট সহ ব্যবহার করা হবে। যদি এটি খুব নিস্তেজ দেখাচ্ছে, আপনি দুটি ঘনিষ্ঠ নমুনাও বিবেচনা করতে পারেন, যেমন। এক বা দুটি পিক্সেল উপরে বা নীচে আরেকটি লাল নমুনা রেখা কল্পনা করুন। এটি একটি অনুরূপ, তবে অভিন্ন তরঙ্গ দেবে না।


বাহ, এই যেমন একটি সাহায্য ছিল! আপনাকে ধন্যবাদ :) আমি ফ্ল্যাশ / অ্যাকশনসক্রিপ্টে বিকাশ করছি- এবং আমি দেখছি একটি বিল্ট-ইন পার্লিননিউজ ফাংশন রয়েছে ... এটির সাথে খেলবে এবং এটি কীভাবে দেখবে :)
ডেভিডকোমার

@ ডেভিডকোমর আমি আনন্দিত যে এটি কার্যকর। ফ্ল্যাশ এ আপনাকে একটি BitmapDataঅবজেক্ট তৈরি করতে হবে এবং এর perlinNoiseফাংশনটি ব্যবহার করতে হবে। বিটম্যাপ 800x3 পিক্সেল বা কিছু চরম হতে পারে, তাহলে আপনি কেবল উপরের এবং নিচের লাইন মান বের করতে পারেনি (ভালো কিছু (bitmap.getPixel(x,y) & 0xff) / 255.0আপনি মান দিতে হবে 0..1পরিসীমা।
bummzack

হুমম- আমি এটি কাজ করে চলেছি, তবে ধ্রুবক / গুণক মানকে দুর্গম অঞ্চলে ঠেলে দেয় ... এখানে আমার কোড, কোনও ধারণা? (ভেক্টুটি 32 বিট মানগুলির একটি ভেক্টর, পার্লিন শব্দের রেখা থেকে নমুনা ... তাই y_val কেবল নীল চ্যানেলটি স্কেলারের দ্বারা গুণিত হয়) এর জন্য (আইডিএক্স = 0; আইডিএক্স <vect.length; idx ++) {y_val = (ভেক্টর [আইডিএক্স] এবং 0xFF) * স্কেলার; ড্রডাটা.ফিলআরেক্ট (নতুন আয়তক্ষেত্র (আইডেক্স, ড্রডাটা.হাইট - y_val, 1, y_val), 0x0000ff); অঙ্কডাটা.ফিলআরেক্ট (নতুন আয়তক্ষেত্র (আইডিএক্স, 0, 1, y_val), 0x0000ff); }
ডেভিডকোমার

আমার এখনই দৌড়াতে হবে- তবে কিছু আমাকে বলছে আমাকে কেবল আপনার মন্তব্যগুলি আরও মনোযোগ সহকারে পড়তে হবে;) আমি এখানেই
রয়েছি-

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