Jadi saya mencoba membuat proyek dengan dua elemen kanvas, masing-masing dengan skrip kertasnya sendiri, dan dengan tombol di bagian luar masing-masing elemen yang mengontrol fungsi tertentu di dalam keduanya.
Di bawah dokumentasi di bawah Paperscript, dikatakan:
Harap diperhatikan: Saat menyertakan lebih dari satu PaperScript dalam satu halaman, setiap skrip akan berjalan >dalam cakupannya sendiri dan tidak akan melihat objek dan fungsi yang dideklarasikan di >yang lain. Agar PaperScript dapat berkomunikasi dengan kode PaperScript atau >JavaScript lain, lihat tutorial tentang Interoperabilitas PaperScript.
...yang sangat disayangkan karena tutorialnya berbunyi sebagai berikut:
Segera hadir!
Saya terjebak dengan sangat cepat dalam proses ini. Saya telah mencoba menempatkan fungsi dalam lingkup global, memanggilnya dari luar kanvasnya, dan melihatnya dicetak di kanvas yang salah. Saya sudah mencoba mengekspor fungsi melalui modul dan sepertinya menjalankan fungsinya (?!?!). Dan yang terburuk, objek 'paper.projects' adalah array dengan satu (!) proyek di dalamnya, kanvas pertama.
Jadi saya bingung.
Adakah yang tahu cara melakukan ini?
EDIT: Jadi rupanya ada jawaban ini tetapi saya tidak mengerti bagaimana hal itu membuat saya bisa menelepon fungsi dalam lingkup PaperScript dari skrip lingkup global.
Sepertinya itu skrip untuk memanggil fungsi global di PaperScope, yang tidak berfungsi untuk saya jika saya mencoba membuat tombol luar melakukan sesuatu.
Jelas saya melewatkan sesuatu.
EDIT KEDUA: Saya telah bermain-main dengan berbagai fungsi global, baik di window.global atau hanya duduk sendiri tanpa deklarasi var... tetapi yang tampaknya terjadi adalah ketika saya mencoba memanggil fungsi yang telah saya definisikan, katakan sebagai :
globals.makecircle = function () {
var o = new Path.Circle({
radius: 50,
center: new Point (200,200)
})
}
dalam lingkup utama, ini akan segera berjalan di jendela yang salah seperti di jendela yang benar. Juga ada penundaan luar biasa sebelum dijalankan yang tidak dapat saya pahami.
EDIT KETIGA: Untuk kejelasan.
Saya memiliki firstcanvas.js
yang dilampirkan ke canvas1
di HTML saya, saya memiliki secondcanvas.js
yang dilampirkan ke canvas2
. Keduanya direferensikan sebagai tipe paperscript, seperti:
<script type="text/paperscript" src="scripts/firstcanvas.js" canvas="canvas1"></script>
<script type="text/paperscript" src="scripts/secondcanvas.js" canvas="canvas2"></script>
Saya membuat objek window.globals
seperti yang disarankan Jurg. Saya menyebutnya dari main.js dengan sebuah tombol, seperti:
window.globals = {}
`$('document').ready($('#dfs').on('click', window.globals.makecircle))`
Saya menambahkan fungsi ini ke global di firstcanvas.js
seperti di atas.
Jika saya baru-baru ini mengeklik kanvas2, mengeklik tombol dengan id='DFS'
akan menyebabkan fungsi berjalan, sangat tertunda, di kanvas2.
Dan paper.projects
tidak mencantumkan kedua proyek tersebut, jadi saya tidak dapat menggunakan fungsi activate()
.