সুচিপত্র:

স্ক্র্যাচ 3.0 এক্সটেনশন: 8 টি ধাপ
স্ক্র্যাচ 3.0 এক্সটেনশন: 8 টি ধাপ

ভিডিও: স্ক্র্যাচ 3.0 এক্সটেনশন: 8 টি ধাপ

ভিডিও: স্ক্র্যাচ 3.0 এক্সটেনশন: 8 টি ধাপ
ভিডিও: লিডস এবং প্রসপেক্ট ম্যানেজ করতে এক্সেলে এই আশ্চর্যজনক যোগাযোগ ম্যানেজার তৈরি করুন [ফ্রি ডাউনলোড] 2024, জুলাই
Anonim
স্ক্র্যাচ 3.0 এক্সটেনশন
স্ক্র্যাচ 3.0 এক্সটেনশন

স্ক্র্যাচ এক্সটেনশনগুলি জাভাস্ক্রিপ্ট কোডের টুকরা যা স্ক্র্যাচে নতুন ব্লক যুক্ত করে। যদিও স্ক্র্যাচটি একগুচ্ছ অফিসিয়াল এক্সটেনশনের সাথে একত্রিত, ব্যবহারকারীর তৈরি এক্সটেনশানগুলি যোগ করার জন্য একটি সরকারী প্রক্রিয়া নেই।

যখন আমি স্ক্র্যাচ 3.0 এর জন্য আমার মাইনক্রাফ্ট কন্ট্রোলিং এক্সটেনশন তৈরি করছিলাম, তখন শুরু করা আমার কাছে কঠিন মনে হয়েছিল। এই নির্দেশযোগ্য বিভিন্ন উত্স (বিশেষত এটি) থেকে তথ্য সংগ্রহ করে, পাশাপাশি কিছু জিনিস যা আমি নিজেকে আবিষ্কার করেছি।

আপনাকে জাভাস্ক্রিপ্টে কিভাবে প্রোগ্রাম করতে হবে এবং কিভাবে একটি ওয়েবসাইটে আপনার জাভাস্ক্রিপ্ট হোস্ট করতে হবে তা জানতে হবে। পরেরটির জন্য, আমি গিটহাব পৃষ্ঠাগুলি সুপারিশ করি।

প্রধান কৌশলটি হল শেপটেস্টারের মোড অফ স্ক্র্যাচ ব্যবহার করা যা আপনাকে এক্সটেনশন এবং প্লাগইন লোড করতে দেয়।

এই নির্দেশযোগ্য আপনাকে দুটি এক্সটেনশন তৈরির মাধ্যমে নির্দেশনা দেবে:

  • আনুন: একটি URL থেকে ডেটা লোড করা এবং JSON ট্যাগ বের করা, উদাহরণস্বরূপ আবহাওয়ার ডেটা লোড করার জন্য
  • সিম্পল গেমপ্যাড: স্ক্র্যাচে একটি গেম কন্ট্রোলার ব্যবহার করে (একটি আরও অত্যাধুনিক সংস্করণ এখানে)।

ধাপ 1: দুই ধরনের এক্সটেনশন

দুই ধরনের এক্সটেনশন আছে যাকে আমি "আনস্যান্ডবক্সড" এবং "স্যান্ডবক্সড" বলব। স্যান্ডবক্সযুক্ত এক্সটেনশনগুলি ওয়েব কর্মী হিসাবে চলে এবং এর ফলে উল্লেখযোগ্য সীমাবদ্ধতা রয়েছে:

  • ওয়েব কর্মীরা উইন্ডো অবজেক্টে গ্লোবাল অ্যাক্সেস করতে পারে না (পরিবর্তে, তাদের একটি গ্লোবাল সেলফ অবজেক্ট আছে, যা অনেক বেশি সীমিত), তাই আপনি গেমপ্যাড অ্যাক্সেসের মতো জিনিসগুলির জন্য তাদের ব্যবহার করতে পারবেন না।
  • স্যান্ডবক্সযুক্ত এক্সটেনশনের স্ক্র্যাচ রানটাইম অবজেক্টে অ্যাক্সেস নেই।
  • স্যান্ডবক্সযুক্ত এক্সটেনশনগুলি অনেক ধীর।
  • স্যান্ডবক্সযুক্ত এক্সটেনশনের জন্য জাভাস্ক্রিপ্ট কনসোল ত্রুটির বার্তাগুলি ক্রোমে আরও গুপ্ত।

অন্য দিকে:

  • অন্য মানুষের স্যান্ডবক্সযুক্ত এক্সটেনশন ব্যবহার করা নিরাপদ।
  • স্যান্ডবক্সযুক্ত এক্সটেনশানগুলি যে কোনও চূড়ান্ত অফিসিয়াল এক্সটেনশন লোডিং সাপোর্টের সাথে কাজ করার সম্ভাবনা বেশি।
  • স্যান্ডবক্সযুক্ত এক্সটেনশানগুলি একটি ডেটা: // ইউআরএল এ এনকোড করে ওয়েব সার্ভারে আপলোড না করে পরীক্ষা করা যেতে পারে।

অফিসিয়াল এক্সটেনশনগুলি (যেমন মিউজিক, পেন ইত্যাদি) সবই স্যান্ডবক্সবিহীন। এক্সটেনশনের জন্য কন্সট্রাকটর স্ক্র্যাচ থেকে রানটাইম অবজেক্ট পায়, এবং উইন্ডো সম্পূর্ণরূপে অ্যাক্সেসযোগ্য।

ফেচ এক্সটেনশনটি স্যান্ডবক্সযুক্ত, তবে গেমপ্যাডের জন্য উইন্ডো থেকে নেভিগেটর বস্তুর প্রয়োজন।

ধাপ 2: একটি স্যান্ডবক্সযুক্ত এক্সটেনশন লেখা: পর্ব I

একটি এক্সটেনশন করতে, আপনি একটি শ্রেণী তৈরি করেন যা এটি সম্পর্কে তথ্য এনকোড করে, এবং তারপর এক্সটেনশনটি নিবন্ধন করতে একটি বিট কোড যোগ করুন।

এক্সটেনশন ক্লাসের প্রধান বিষয় হল একটি getInfo () পদ্ধতি যা প্রয়োজনীয় ক্ষেত্রগুলির সাথে একটি বস্তু প্রদান করে:

  • আইডি: এক্সটেনশনের অভ্যন্তরীণ নাম, প্রতিটি এক্সটেনশনের জন্য অনন্য হতে হবে
  • নাম: এক্সটেনশনের বন্ধুত্বপূর্ণ নাম, স্ক্র্যাচের ব্লকের তালিকায় দেখা যাচ্ছে
  • ব্লক: নতুন কাস্টম ব্লক বর্ণনা করা বস্তুর একটি তালিকা।

এবং একটি alচ্ছিক মেনু ক্ষেত্র আছে যা ফেচ ব্যবহার করা হয় না কিন্তু গেমপ্যাডে ব্যবহার করা হবে।

সুতরাং, এখানে আনার জন্য মৌলিক টেমপ্লেট:

ক্লাস স্ক্র্যাচফেচ {

কনস্ট্রাক্টর () {} getInfo () {return {"id": "Fetch", "name": "Fetch", "block": [/* পরে যোগ করুন * /]}} / * ব্লকের পদ্ধতি যোগ করুন * /} Scratch.extensions.register (নতুন ScratchFetch ())

ধাপ 3: একটি স্যান্ডবক্সযুক্ত এক্সটেনশন লেখা: দ্বিতীয় অংশ

এখন, আমাদের getInfo () এর অবজেক্টে ব্লকের তালিকা তৈরি করতে হবে। প্রতিটি ব্লকে কমপক্ষে এই চারটি ক্ষেত্রের প্রয়োজন:

  • opcode: এই পদ্ধতির নাম যা ব্লকের কাজ করতে বলা হয়
  • blockType: এটি ব্লক টাইপ; এক্সটেনশনের জন্য সবচেয়ে সাধারণ হল:

    • "কমান্ড": কিছু করে কিন্তু মান ফেরত দেয় না
    • "প্রতিবেদক": একটি স্ট্রিং বা সংখ্যা প্রদান করে
    • "বুলিয়ান": একটি বুলিয়ান প্রদান করে (মূলধন নোট করুন)
    • "টুপি": ইভেন্ট ক্যাচিং ব্লক; যদি আপনার স্ক্র্যাচ কোড এই ব্লকটি ব্যবহার করে, তাহলে স্ক্র্যাচ রানটাইম নিয়মিতভাবে সংশ্লিষ্ট পদ্ধতিতে ভোট দেয় যা ইভেন্টটি ঘটেছে কিনা তা বলার জন্য একটি বুলিয়ান প্রদান করে
  • টেক্সট: এটি ব্লকের বন্ধুত্বপূর্ণ বর্ণনা, বন্ধনীতে যুক্তি সহ, যেমন, " থেকে ডেটা আনুন"
  • আর্গুমেন্ট: এটি এমন একটি বস্তু যা প্রতিটি যুক্তির জন্য একটি ক্ষেত্র রয়েছে (যেমন, উপরের উদাহরণে "url"); এই বস্তুর পরিবর্তে এই ক্ষেত্রগুলি রয়েছে:

    • টাইপ: হয় "স্ট্রিং" বা "সংখ্যা"
    • defaultValue: ডিফল্ট মান পূর্বে ভরা।

উদাহরণস্বরূপ, এখানে আমার ফেচ এক্সটেনশনে ব্লক ক্ষেত্র রয়েছে:

"ব্লক": [{"opcode": "fetchURL", "blockType": "reporter", "text": "", "আর্গুমেন্টস" থেকে ডেটা নিয়ে আসুন: {"url": {"type": "string", "defaultValue ":" https://api.weather.gov/stations/KNYC/observations "},}}, {" opcode ":" jsonExtract "," blockType ":" রিপোর্টার "," টেক্সট ":" এক্সট্রাক্ট [নাম] [data] "," আর্গুমেন্ট ": {" name ": {" type ":" string "," defaultValue ":" temperature "}," data ": {" type ":" string "," defaultValue ": '{"তাপমাত্রা": 12.3}'},}},]

এখানে, আমরা দুটি ব্লক সংজ্ঞায়িত করেছি: fetchURL এবং jsonExtract। দুজনেই সাংবাদিক। প্রথমটি ইউআরএল থেকে ডেটা টেনে নিয়ে আসে এবং দ্বিতীয়টি JSON ডেটা থেকে একটি ক্ষেত্র বের করে।

অবশেষে, আপনাকে দুটি ব্লকের পদ্ধতিগুলি অন্তর্ভুক্ত করতে হবে। প্রতিটি পদ্ধতি একটি আর্গুমেন্ট হিসাবে একটি বস্তু নেয়, সমস্ত আর্গুমেন্টের জন্য ক্ষেত্র সহ বস্তু। আপনি আর্গুমেন্টগুলিতে কোঁকড়া ধনুর্বন্ধনী ব্যবহার করে এগুলি ডিকোড করতে পারেন। উদাহরণস্বরূপ, এখানে একটি সিঙ্ক্রোনাস উদাহরণ:

jsonExtract ({name, data}) {

var parsed = JSON.parse (data) if (name in parsed) {var out = parsed [name] var t = typeof (out) if (t == "string" || t == "number") যদি ফিরে আসে (t == "বুলিয়ান") টি ফেরত? 1: 0 ফিরে JSON.stringify (out)} অন্য {return ""}}

কোডটি JSON ডেটা থেকে নাম ক্ষেত্রটি টেনে নিয়ে যায়। যদি ক্ষেত্রটিতে একটি স্ট্রিং, সংখ্যা বা বুলিয়ান থাকে, আমরা তা ফেরত দিই। অন্যথায়, আমরা ক্ষেত্রটি পুনরায় JSONify করি। এবং JSON থেকে নাম অনুপস্থিত থাকলে আমরা একটি খালি স্ট্রিং ফেরত দিই।

কখনও কখনও, তবে, আপনি একটি ব্লক তৈরি করতে চাইতে পারেন যা একটি অ্যাসিঙ্ক্রোনাস API ব্যবহার করে। FetchURL () পদ্ধতিটি fetch API ব্যবহার করে যা অ্যাসিঙ্ক্রোনাস। এই ক্ষেত্রে, আপনার পদ্ধতি থেকে একটি প্রতিশ্রুতি ফিরিয়ে দেওয়া উচিত যা কাজ করে। এই ক্ষেত্রে:

fetchURL ({url}) {

ফেরত আনা (url) তারপর (response => response.text ())}

এটাই. সম্পূর্ণ এক্সটেনশন এখানে।

ধাপ 4: একটি স্যান্ডবক্সযুক্ত এক্সটেনশন ব্যবহার করা

একটি স্যান্ডবক্সযুক্ত এক্সটেনশন ব্যবহার করে
একটি স্যান্ডবক্সযুক্ত এক্সটেনশন ব্যবহার করে
একটি স্যান্ডবক্সযুক্ত এক্সটেনশন ব্যবহার করে
একটি স্যান্ডবক্সযুক্ত এক্সটেনশন ব্যবহার করে
একটি স্যান্ডবক্সযুক্ত এক্সটেনশন ব্যবহার করে
একটি স্যান্ডবক্সযুক্ত এক্সটেনশন ব্যবহার করে

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

আমার fetch.js হোস্ট করা হয় https://arpruss.github.io/fetch.js এ। অথবা আপনি আপনার এক্সটেনশনটিকে একটি ডাটা ইউআরএল -এ আপলোড করে এখানে রূপান্তর করতে পারেন এবং তারপর ক্লিপবোর্ডে কপি করতে পারেন। একটি ডেটা ইউআরএল একটি বিশাল ইউআরএল যা এতে একটি সম্পূর্ণ ফাইল ধারণ করে।

SheepTester এর স্ক্র্যাচ মোডে যান। নিচের বাম কোণে অ্যাড এক্সটেনশন বাটনে ক্লিক করুন। তারপরে "একটি এক্সটেনশন চয়ন করুন" এ ক্লিক করুন এবং আপনার ইউআরএল লিখুন (আপনি যদি চান তবে পুরো বিশাল ডেটা ইউআরএলে পেস্ট করতে পারেন)।

সব ঠিকঠাক থাকলে, আপনার স্ক্র্যাচ স্ক্রিনের বাম পাশে আপনার এক্সটেনশনের জন্য একটি এন্ট্রি থাকবে। যদি জিনিসগুলি ভাল না হয় তবে আপনার জাভাস্ক্রিপ্ট কনসোল (ক্রোমে shift-ctrl-J) খুলুন এবং সমস্যাটি ডিবাগ করার চেষ্টা করুন।

উপরে আপনি ইউএস ন্যাশনাল ওয়েদার সার্ভিসের কেএনওয়াইসি (নিউইয়র্কে) স্টেশন থেকে জেএসওএন ডেটা নিয়ে আসে এবং পার্স করে এমন কিছু উদাহরণ কোড খুঁজে পাবে, এবং স্প্রাইটকে একইভাবে মুখোমুখি করার সময় এটিকে প্রদর্শন করবে, যেভাবে বাতাস বইছে। যেভাবে আমি এটি তৈরি করেছি তা হল একটি ওয়েব ব্রাউজারে ডেটা আনা, এবং তারপর ট্যাগ বের করা। আপনি যদি অন্য কোনো আবহাওয়া স্টেশন ব্যবহার করতে চান, তাহলে weather.gov- এর সার্চ বক্সে কাছাকাছি একটি জিপ কোড লিখুন এবং আপনার অবস্থানের আবহাওয়া পৃষ্ঠায় আপনাকে চার অক্ষরের স্টেশন কোড দেওয়া উচিত, যা আপনি KNYC- এর জায়গায় ব্যবহার করতে পারেন। কোড

আপনি "? Url =" যুক্তি যুক্ত করে SheepTester এর মোডের URL- এ আপনার স্যান্ডবক্সযুক্ত এক্সটেনশনটি অন্তর্ভুক্ত করতে পারেন। এই ক্ষেত্রে:

sheeptester.github.io/scratch-gui/?url=https://arpruss.github.io/fetch.js

ধাপ 5: একটি আনস্যান্ডবক্সড এক্সটেনশন লেখা: ভূমিকা

একটি আনস্যান্ডবক্সড এক্সটেনশনের কনস্ট্রাক্টর একটি রানটাইম অবজেক্ট পাস করে। আপনি এটি উপেক্ষা করতে পারেন বা এটি ব্যবহার করতে পারেন। রানটাইম অবজেক্টের একটি ব্যবহার হল ইভেন্ট ("হ্যাট ব্লক") সিঙ্ক্রোনাইজ করার জন্য এর currentMSecs প্রপার্টি ব্যবহার করা। যতদূর আমি বলতে পারি, সমস্ত ইভেন্ট ব্লক অপকোডগুলি নিয়মিতভাবে পোল করা হয়, এবং ভোটের প্রতিটি রাউন্ডের একটি একক বর্তমান MSecs মান থাকে। আপনার যদি রানটাইম অবজেক্টের প্রয়োজন হয়, আপনি সম্ভবত এর সাথে আপনার এক্সটেনশন শুরু করবেন:

বর্গ এক্সটেনশন ক্লাস {

কনস্ট্রাক্টর (রানটাইম) {this.runtime = runtime…}…}

সমস্ত স্ট্যান্ডার্ড উইন্ডো অবজেক্ট জিনিসগুলি আনস্যান্ডবক্সড এক্সটেনশনে ব্যবহার করা যেতে পারে। অবশেষে, আপনার আনস্যান্ডবক্সড এক্সটেনশনটি এই ম্যাজিক কোডের সাথে শেষ হওয়া উচিত:

(ফাংশন () {

var extensionInstance = নতুন EXTENSIONCLASS (window.vm.extensionManager.runtime) var serviceName = window.vm.extensionManager._registerInternalExtension (extensionInstance) window.vm.extensionManager._loadedExtensions.set (extensionInstance.get)।)

যেখানে আপনার এক্সটেনশন ক্লাসের সাথে এক্সটেনশন ক্লাস প্রতিস্থাপন করা উচিত।

ধাপ 6: একটি আনস্যান্ডবক্সড এক্সটেনশন লেখা: সহজ গেমপ্যাড

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

প্রতিটি ইভেন্ট ব্লক পোলিং চক্রের সময়, আমরা রানটাইম অবজেক্ট এবং আগের এবং বর্তমান গেমপ্যাড অবস্থা থেকে একটি টাইমস্ট্যাম্প সংরক্ষণ করব। আমাদের নতুন ভোট চক্র আছে কিনা তা সনাক্ত করতে টাইমস্ট্যাম্প ব্যবহার করা হয়। সুতরাং, আমরা দিয়ে শুরু করি:

ক্লাস ScratchSimpleGamepad {

কনস্ট্রাক্টর (রানটাইম) {this.runtime = runtime this.currentMSecs = -1 this.previousButtons = this.currentButtons = }…} আমাদের একটি ইভেন্ট ব্লক থাকবে, দুটি ইনপুট সহ-একটি বোতাম নম্বর এবং একটি মেনু নির্বাচন করার জন্য যে আমরা ইভেন্টটি প্রেস বা রিলিজে ট্রিগার করতে চাই কিনা। সুতরাং, এখানে আমাদের পদ্ধতি

তথ্য পেতে() {

ফিরে আসুন eventType] "," যুক্তি ": {" b ": {" type ":" number "," defaultValue ":" 0 "}," eventType ": {" type ":" number "," defaultValue ":" 1 "," menu ":" pressReleaseMenu "},},},]," menus ": {" pressReleaseMenu ": [{text:" press ", value: 1}, {text:" release ", value: 0}],}}; } আমি মনে করি ড্রপ-ডাউন মেনুতে মানগুলি এখনও সংখ্যা হিসাবে ঘোষিত হওয়া সত্ত্বেও স্ট্রিং হিসাবে অপকোড ফাংশনে পাস হয়ে যায়। তাই প্রয়োজন অনুযায়ী মেনুতে নির্দিষ্ট মানগুলির সাথে তাদের স্পষ্টভাবে তুলনা করুন। আমরা এখন একটি পদ্ধতি লিখি যা বোতামটি আপডেট করে যখনই একটি নতুন ইভেন্ট পোলিং চক্র ঘটে

হালনাগাদ() {

if (this.runtime.currentMSecs == this.currentMSecs) রিটার্ন // নতুন ভোট চক্র নয় this.currentMSecs = this.runtime.currentMSecs var gamepads = navigator.getGamepads () if (gamepads == null || gamepads.length = = 0 || গেমপ্যাড [0] == শূন্য) {this.previousButtons = this.currentButtons = return} var gamepad = gamepads [0] if (gamepad.buttons.length! = This.previousButtons.length) { // বিভিন্ন সংখ্যক বোতাম, তাই নতুন গেমপ্যাড এই। currentButtons} this.currentButtons = for (var i = 0; i <gamepad.buttons.length; i ++) this.currentButtons.push (gamepad.buttons .pressed)} অবশেষে, আমরা আপডেট () পদ্ধতিতে কল করে আমাদের ইভেন্ট ব্লকটি বাস্তবায়ন করতে পারি এবং তারপরে বর্তমান এবং পূর্ববর্তী বোতামের অবস্থাগুলির তুলনা করে প্রয়োজনীয় বোতাম টিপানো হয়েছে বা ছেড়ে দেওয়া হয়েছে কিনা তা পরীক্ষা করে

buttonPressedReleased ({b, eventType}) {

this.update () if (b <this.currentButtons.length) {if (eventType == 1) {// note: এটি একটি স্ট্রিং হবে, তাই এটিকে 1 এর সাথে তুলনা করা ভাল এটিকে বুলিয়ান হিসেবে বিবেচনা করার চেয়ে যদি (this.currentButtons &&! this.previousButtons ) {return true}} অন্য {যদি (! this.currentButtons && this.previousButtons ) {return true}}} false false এবং পরিশেষে আমরা ক্লাস নির্ধারণ করার পর আমাদের ম্যাজিক এক্সটেনশন রেজিস্ট্রেশন কোড যোগ করি

(ফাংশন () {

var extensionInstance = new ScratchSimpleGamepad (window.vm.extensionManager.runtime) var serviceName = window.vm.extensionManager._registerInternalExtension (extensionInstance) window.vm.extensionManager._loadedExtensions.set (extensionInstance.get)।)

আপনি এখানে সম্পূর্ণ কোড পেতে পারেন।

ধাপ 7: একটি আনস্যান্ডবক্সড এক্সটেনশন ব্যবহার করা

একটি আনস্যান্ডবক্সড এক্সটেনশন ব্যবহার করে
একটি আনস্যান্ডবক্সড এক্সটেনশন ব্যবহার করে

আবারও, আপনার এক্সটেনশানটি কোথাও হোস্ট করুন, এবং এইবার এটিকে load_plugin = এর সাথে লোড করুন url = SheepTester এর স্ক্র্যাচ মোডে যুক্তির পরিবর্তে। উদাহরণস্বরূপ, আমার সহজ গেমপ্যাড মোডের জন্য, এখানে যান:

sheeptester.github.io/scratch-gui/?load_plugin=https://arpruss.github.io/simplegamepad.js

(যাইহোক, যদি আপনি আরও অত্যাধুনিক গেমপ্যাড চান তবে উপরের URL থেকে কেবল "সহজ" সরান এবং আপনার কাছে রাম্বল এবং এনালগ অক্ষ সমর্থন থাকবে।)

আবার, এক্সটেনশনটি আপনার স্ক্র্যাচ এডিটরের বাম দিকে উপস্থিত হওয়া উচিত। উপরে একটি খুব সহজ স্ক্র্যাচ প্রোগ্রাম যা বলে "হ্যালো" যখন আপনি বাটন 0 চাপবেন এবং "বিদায়" দিবেন যখন আপনি এটি ছেড়ে দেবেন।

ধাপ 8: দ্বৈত-সামঞ্জস্য এবং গতি

আমি লক্ষ্য করেছি যে এক্সটেনশন ব্লকগুলি লোডিং পদ্ধতি ব্যবহার করে দ্রুততর মাত্রার একটি ক্রম চালায় যা আমি স্যান্ডবক্সবিহীন এক্সটেনশনের জন্য ব্যবহার করেছি। সুতরাং যতক্ষণ না আপনি একটি ওয়েব ওয়ার্কার স্যান্ডবক্সে চলার নিরাপত্তা সুবিধার কথা চিন্তা করেন, ততক্ষণ আপনার কোডটি।

এক্সটেনশন ক্লাস নির্ধারণ করার পরে নিম্নলিখিত কোড ব্যবহার করে আপনি লোডিং পদ্ধতির সাথে একটি স্যান্ডবক্সযুক্ত এক্সটেনশন তৈরি করতে পারেন (CLASSNAME কে আপনার এক্সটেনশন ক্লাসের নাম পরিবর্তন করুন):

(ফাংশন () {

var extensionClass = CLASSNAME যদি (typeof window === "undefined" ||! window.vm) {Scratch.extensions.register (new extensionClass ())} else {var extensionInstance = new extensionClass (window.vm.extensionManager.runtime) var serviceName = window.vm.extensionManager._registerInternalExtension (extensionInstance) window.vm.extensionManager._loadedExtensions.set (extensionInstance.getInfo ()। id, serviceName)}}) ()

প্রস্তাবিত: