Scratch 3.0을 Hack하자. ScratchVM의 Opcode

7360 단어 Scratch
Scratch VM을 실행했을 때, 그 안에서 무슨 일이 일어나고 있습니까?
보자.



htps : // 우우키. sc 등 tch. 미 t. 에즈 / 우키 / VM_P 레후 렌세 s
htps : // 우우키. sc 등 tch. 미 t. 에즈 / 우키 / Sc 등 tch_2.0
htps : // 우우키. sc 등 tch. 미 t. 에즈 / 우키 / Sc 등 tch_3.0

VM이란 무엇입니까?



VM은 Virtual Machine의 약자입니다.

어떤 기회를 모방하고 작동하는 소프트웨어입니다.

예를 들어 VirtualBox라는 x86 가상화 VM이 있습니다. 이 소프트웨어를 사용하면 자신의 PC에 다른

OS를 작동시킬 수 있습니다.

Java 언어 등에도 Java 가상 머신이 있습니다.

Java의 바이트 코드를 실행하는 스택 형 소프트웨어로 Java로 작성된 프로그램

움직일 수 있습니다

Scratch VM은 Java처럼 Scratch로 작성된 코드를 이해합니다.

실행하는 소프트웨어입니다.

프로그램 언어의 VM 공통점



OPCODE/ByteCode 되는 것이 존재한다.

이것은 VM의 한 명령어이며 매우 간단합니다.

프로그램 언어는, 「인간의 언어에 가까운 기술」을 「OPCODE」로 변환한 후,

그것을 실행합니다.

 

Scratch 코드를 따라 가자.



Scratch는 어떤 OPCODE를 가지고 있습니까? 어떤 느낌으로 작동합니까?
찾아보자!!

이전의 코드를 보면, ScratchVM->start() 로부터, 시작되는 것이었습니다.
코드를 따라 보자!
ScratchVM->start ()
  ScratchRuntime->start ()
    this._steppingInterval = setInterval(() => {
       this._step();
    }, interval);

htps : // 기주 b. 이 m/lK/sc등 tch-vm/bぉb/로 ゔぇぉp/src/ゔぃr 쭉 l-마치네. js
htps : // 기주 b. 이 m/lK/sc등 tch-vm/bぉb/로 ゔぇぉp/src/엔기네/룬치메. js

라고 되어 있었습니다.
즉, Scratch VM 는 , ScratchRuntime->_step(); 를, 짧은 감각으로 몇번이나 부르는 만들기와 같습니다.
 _step () {
    ...
    this.monitorBlocks.runAllMonitored(this);
    ...
    this.sequencer.stepThreads();
    ...
    this.renderer.draw();
  }

this.sequencer.stepThreads(); 그럼,
...
ScratchExecute->execute()
..
ScratchExecute->thread.goToNextBlock();
...

htps : // 기주 b. 이 m/lK/sc등 tch-vm/bぉb/로 js
그리고 ScratchExecute를 순차적으로 실행하면서,
그리는 것을 알 수 있습니다.

ScratchExecute



ScratchExecute->execute() 안에서 블록을 순차적으로 꺼내고,
let block = blockContainer.getBlock(currentBlockId);
const opcode = blockContainer.getOpcode(block);
const fields = blockContainer.getFields(block);
const inputs = blockContainer.getInputs(block);
const blockFunction = runtime.getOpcodeFunction(opcode);
const isHat = runtime.getIsHat(opcode);
..
.
primitiveReportedValue = blockFunction(argValues, blockUtility);


순차적으로 실행합니다.
htps : // 기주 b. 이 m / lk / sc 등 tch-vm / t ree /
코드가 실행되는 것입니다.

또한이 블록을 Scratch에서는 OPCODE로 취급하는 것 같습니다.

Scratch의 Opcode는 Block의 종류로부터 유추할 수 있다



scratch-blocks에서 GUI의 Block을 json 형식 등으로 변환
scratch-vm없이 json을 나무 구조로 변환
그리고, Sprite를 상하 좌우로 이동하거나, if문을 움직이거나, 루프 처리를 하면,
OPCODE로 실행되면 ...

ScartchVM이 해석하는 OPCODE에 대해서는, Scratch의 GUI로 조작하고 있는 내용과 거의 같습니다. 곧 이해할 수 있다고 생각합니다.

읽고 보면 좋을 것입니다.
htps : // 기주 b. 이 m / lk / sc 등 tch-vm / t ree /

PS



이하의 장소에서도, 알레코레 써 갑니다.



Scratch2.0 입문



불의 형태 With Scratch 2.0 (프로그램 입문) 00권



불의 형태 With Scratch 2.0 (프로그램 입문) 01권
화염 유형 With Scratch 2.0 (게임 프로그램 시작)

Scratch3.0 자신 전용기를 만들자!!



(0) Scratch 3.0 자신 전용기를 만들자!! (0)
(1) Scratch3.0을 빌드해 보자
(2) Scratch3.0을 Android 앱으로 작동합시다. (1)
(3) Scratch3.0을 Android 앱으로 작동합시다. (2)
(4) Scratch3.0을 Android 앱으로 작동합시다 (3)
(5) Webpack이란?
(6) Scratch3.0의 package.json을 읽어 보자.
(7) scratch-gui를 설치해 봅시다.
(8) scratch-vm에 사용되는 scratch-xxx를 만져 보자.
(9) Babel을 만져 보자.
(10) scratch-render.js에서 무언가를 만들어 만져 보자.
(11) scratch-storage.js를 만져 보자.
(12) Blockly를 만져 보자.
(13) Scratch Block을 만져 보자.
(14) scratch-vm.js를 사용하여 100 줄로 HTML5 화합시다.
(15) ScratchVM의 Opcode

좋은 웹페이지 즐겨찾기