프로그램에 따라 우주를 생성하다🌌🚀
8762 단어 javascript
무한한 우주를 창조하다
이 블로그에서 우리는 탐색 프로그램을 생성하고 자신을 위해 작은 우주를 만들어 탐색할 것이다.
저희가 인코딩을 해볼게요.
제 예시에서 저는 p5js Editor을 사용할 것입니다. 따라서 언제든지 곤경에 빠지면 제가 제공할 수 있습니다link to the code.이 실현은 p5js 프레임워크가 필요하지 않습니다. 왜냐하면 이api를 거의 사용하지 않기 때문입니다. 그러나 편의를 위해 사용할 것입니다.p5js에 대한 더 많은 정보를 알고 싶으면 제introductory blog to p5js를 보십시오.
다음 부트 코드는 빈 우주를 제공합니다.
function setup() {
createCanvas(1280, 720);
}
function draw() {
background(0);
}
이렇게 해야 한다:
위조 임의성
Pseudorandomness는 우리가 만들 우주의 주간이다. 본질적으로 씨앗이라고 불리는 값을 제공할 수 있고 씨앗이 같으면 항상 같은 랜덤수를 되돌려준다.무작위 값을 감안하면, 우리는 그것으로 우리의 우주를 생성하거나, 적어도 우주의 일부분을 생성할 수 있다.자바스크립트에서 random () 함수에 피드를 제공할 수 없습니다. 따라서 라이브러리를 가져와서 index.html
에 다음 내용을 추가해야 합니다.
<script src="//cdnjs.cloudflare.com/ajax/libs/seedrandom/3.0.5/seedrandom.min.js">
</script>
따라서 다음 목표에 피드를 제공할 때:
let rng = new Math.seedrandom(`i am a seed`);
console.log(rng()) // 0.9143626543607534
항상 동일한 값을 제공하며 후속 호출 시 다음과 같은 새로운 임의 값이 생성됩니다.
let rng = new Math.seedrandom(`i am a seed`);
console.log(rng()) // 0.9143626543607534
console.log(rng()) // 0.24035517260087458
console.log(rng()) // 0.8950846823124523
우리는 그것을 이용하여 우주의 일부 속성을 확정할 수 있다.우주는 많은 성계로 구성되어 있으며, 우리로 하여금 성계류를 창건하게 한다.
은하계
다음 내용을 색인에 추가합니다.html
<script src="Galaxy.js"></script>
갤럭시라는 새 파일을 만듭니다.js.
class Galaxy {
constructor(x, y) {
this.rng = new Math.seedrandom(`${x} ${y}`);
this.numberOfPlanets = Math.floor(this.rng() * 8);
}
}
갤럭시류의 구조 함수가 x와 y값을 어떻게 얻는지 주의하십시오. 이것은 우리의 피드입니다.그리고 내가 어떻게 생성기를 사용하여 우리 성계에 얼마나 많은 행성이 있는지 확인하는지 주의해 주십시오. 그래서 이 장면에서 우리 성계는 최대 7개의 행성이 있을 수 있습니다. 나는 작은 성계라는 것을 알고 있습니다😉 태양계라고 할 만하다.
우리의 초도에서 우리가 우주에 있는 위치의 x와 y값을 통해 은하계 물체를 만듭니다.js.
let x = 0; // our starting position
let y = 0;
let galaxy;
function setup() {
createCanvas(1280, 720);
galaxy = new Galaxy(x, y);
}
function draw() {
background(0);
}
몇몇 행성을 창조하다
행성을 만듭니다. rng () 를 사용하여 행성의 속성에 피드 랜덤 값을 생성합니다.나는 이미 이 때문에 목표를 하나 설정했다.속성, 두 가지 새로운 방법createPlanets()와 draw()가 추가되었습니다.
class Galaxy {
constructor(x, y) {
this.rng = new Math.seedrandom(`${x} ${y}`);
this.numberOfPlanets = Math.floor(this.rng() * 8); // max 8 planets
this.planets = this.createPlanets();
}
createPlanets() {
let planets = [];
for (let i = 0; i < this.numberOfPlanets; i++) {
let x = this.rng() * width; // anywhere within the width of the screen
let y = this.rng() * height; // anywhere within the height of the screen
let r = this.rng() * 300; // some arbitrary radius
planets.push({x,y,r});
}
return planets;
}
draw() {
for (let planet of this.planets) {
ellipse(planet.x, planet.y, planet.r, planet.r);
}
}
}
우리는 초도에 추첨에 참가합시다.js
let x = 0; // our starting position
let y = 0;
let galaxy;
function setup() {
createCanvas(1280, 720);
galaxy = new Galaxy(x, y);
}
function draw() {
background(0);
galaxy.draw(); // add this
}
이것이 바로 우리의 첫 번째 성계이다
은하계에서 내비게이션을 할 수 있도록 코드를 추가합니다. 그래서 이 설정에서 화살표 키로 이동하기만 하면 됩니다. 그래서 오른쪽 키를 누르면 오른쪽 은하계로 이동하고 위로 버튼을 누르면 위의 은하계로 이동합니다. 등등.
let x = 0; // our starting position
let y = 0;
let galaxy;
function setup() {
createCanvas(1280, 720);
setupGalaxy();
}
function draw() {
background(0);
galaxy.draw();
}
function keyPressed() {
if (keyCode == UP_ARROW) {
y += height;
} else if (keyCode == DOWN_ARROW) {
y -= height;
} else if (keyCode == LEFT_ARROW) {
x -= width;
} else if (keyCode == RIGHT_ARROW) {
x += width;
}
setupGalaxy();
}
function setupGalaxy() {
galaxy = new Galaxy(x, y);
}
이제 오른쪽 화살표 키를 누르면 다음 성계를 볼 수 있습니다.
왼쪽 화살표 키를 누르면 우리의 첫 번째 성계를 볼 수 있습니다.
일을 좋게 할 때가 됐어요.
이 물건을 우주처럼 보일 수 있도록 자산을 추가하자.
당신은 p5js sketch에서 자산을 얻을 수 있습니다.
이미지를 불러오고'자산'이라는 그룹을 설정합니다. 새로 만들 때 갤럭시 대상에 전달합니다!
let assets = [];
function preload() {
for (let i = 1; i <= 20; i++) {
assets.push(loadImage(`assets/${i}.png`))
}
console.log(assets);
}
...
function setupGalaxy() {
galaxy = new Galaxy(x, y, assets); // add assets as a constructor argument
}
갤럭시 클래스에서는 자산을 속성으로 설정한 다음 행성 개체를 만들 때 어떤 종류의 행성-어떤 자산을 선택할지 결정하는 새로운 유형 변수를 도입합니다.
class Galaxy {
constructor(x, y, assets) {
this.assets = assets;
this.rng = new Math.seedrandom(`${x} ${y}`);
this.numberOfPlanets = Math.floor(this.rng() * 8); // max 8 planets
this.planets = this.createPlanets();
}
createPlanets() {
let planets = [];
for (let i = 0; i < this.numberOfPlanets; i++) {
let x = this.rng() * width; // anywhere within the width of the screen
let y = this.rng() * height; // anywhere within the height of the screen
let r = this.rng() * 300; // some arbitrary radius
let type = Math.floor(this.rng() * 20);
console.log(type);
planets.push({x,y,r,type});
}
return planets;
}
draw() {
for (let planet of this.planets) {
image(this.assets[planet.type], planet.x, planet.y, planet.r, planet.r);
}
}
}
엉엉!이제 우리는 프로그램이 생성한 우주가 생겼다!
결론
나는 너희들이 이 세대 프로그램의 소개를 좋아하길 바란다. 나는 당연히 그것을 이해하는 것을 좋아한다.나는 이것이 너희들에게 더욱 깊이 탐색하는 동력을 주었고 프로그램 생성의 잠재력을 인식해 주기를 바란다.우리 우주에서 우리가 할 수 있는 것은 아직 매우 많다. 여기에 몇 가지 생각이 있다. 나는 너희들이 무엇을 생각해 낼 수 있는지 매우 보고 싶다!
제 예시에서 저는 p5js Editor을 사용할 것입니다. 따라서 언제든지 곤경에 빠지면 제가 제공할 수 있습니다link to the code.이 실현은 p5js 프레임워크가 필요하지 않습니다. 왜냐하면 이api를 거의 사용하지 않기 때문입니다. 그러나 편의를 위해 사용할 것입니다.p5js에 대한 더 많은 정보를 알고 싶으면 제introductory blog to p5js를 보십시오.
다음 부트 코드는 빈 우주를 제공합니다.
function setup() {
createCanvas(1280, 720);
}
function draw() {
background(0);
}
이렇게 해야 한다: 위조 임의성
Pseudorandomness는 우리가 만들 우주의 주간이다. 본질적으로 씨앗이라고 불리는 값을 제공할 수 있고 씨앗이 같으면 항상 같은 랜덤수를 되돌려준다.무작위 값을 감안하면, 우리는 그것으로 우리의 우주를 생성하거나, 적어도 우주의 일부분을 생성할 수 있다.자바스크립트에서 random () 함수에 피드를 제공할 수 없습니다. 따라서 라이브러리를 가져와서
index.html
에 다음 내용을 추가해야 합니다.<script src="//cdnjs.cloudflare.com/ajax/libs/seedrandom/3.0.5/seedrandom.min.js">
</script>
따라서 다음 목표에 피드를 제공할 때:let rng = new Math.seedrandom(`i am a seed`);
console.log(rng()) // 0.9143626543607534
항상 동일한 값을 제공하며 후속 호출 시 다음과 같은 새로운 임의 값이 생성됩니다. let rng = new Math.seedrandom(`i am a seed`);
console.log(rng()) // 0.9143626543607534
console.log(rng()) // 0.24035517260087458
console.log(rng()) // 0.8950846823124523
우리는 그것을 이용하여 우주의 일부 속성을 확정할 수 있다.우주는 많은 성계로 구성되어 있으며, 우리로 하여금 성계류를 창건하게 한다.은하계
다음 내용을 색인에 추가합니다.html
<script src="Galaxy.js"></script>
갤럭시라는 새 파일을 만듭니다.js.
class Galaxy {
constructor(x, y) {
this.rng = new Math.seedrandom(`${x} ${y}`);
this.numberOfPlanets = Math.floor(this.rng() * 8);
}
}
갤럭시류의 구조 함수가 x와 y값을 어떻게 얻는지 주의하십시오. 이것은 우리의 피드입니다.그리고 내가 어떻게 생성기를 사용하여 우리 성계에 얼마나 많은 행성이 있는지 확인하는지 주의해 주십시오. 그래서 이 장면에서 우리 성계는 최대 7개의 행성이 있을 수 있습니다. 나는 작은 성계라는 것을 알고 있습니다😉 태양계라고 할 만하다.
우리의 초도에서 우리가 우주에 있는 위치의 x와 y값을 통해 은하계 물체를 만듭니다.js.
let x = 0; // our starting position
let y = 0;
let galaxy;
function setup() {
createCanvas(1280, 720);
galaxy = new Galaxy(x, y);
}
function draw() {
background(0);
}
몇몇 행성을 창조하다
행성을 만듭니다. rng () 를 사용하여 행성의 속성에 피드 랜덤 값을 생성합니다.나는 이미 이 때문에 목표를 하나 설정했다.속성, 두 가지 새로운 방법createPlanets()와 draw()가 추가되었습니다.
class Galaxy {
constructor(x, y) {
this.rng = new Math.seedrandom(`${x} ${y}`);
this.numberOfPlanets = Math.floor(this.rng() * 8); // max 8 planets
this.planets = this.createPlanets();
}
createPlanets() {
let planets = [];
for (let i = 0; i < this.numberOfPlanets; i++) {
let x = this.rng() * width; // anywhere within the width of the screen
let y = this.rng() * height; // anywhere within the height of the screen
let r = this.rng() * 300; // some arbitrary radius
planets.push({x,y,r});
}
return planets;
}
draw() {
for (let planet of this.planets) {
ellipse(planet.x, planet.y, planet.r, planet.r);
}
}
}
우리는 초도에 추첨에 참가합시다.js
let x = 0; // our starting position
let y = 0;
let galaxy;
function setup() {
createCanvas(1280, 720);
galaxy = new Galaxy(x, y);
}
function draw() {
background(0);
galaxy.draw(); // add this
}
이것이 바로 우리의 첫 번째 성계이다
은하계에서 내비게이션을 할 수 있도록 코드를 추가합니다. 그래서 이 설정에서 화살표 키로 이동하기만 하면 됩니다. 그래서 오른쪽 키를 누르면 오른쪽 은하계로 이동하고 위로 버튼을 누르면 위의 은하계로 이동합니다. 등등.
let x = 0; // our starting position
let y = 0;
let galaxy;
function setup() {
createCanvas(1280, 720);
setupGalaxy();
}
function draw() {
background(0);
galaxy.draw();
}
function keyPressed() {
if (keyCode == UP_ARROW) {
y += height;
} else if (keyCode == DOWN_ARROW) {
y -= height;
} else if (keyCode == LEFT_ARROW) {
x -= width;
} else if (keyCode == RIGHT_ARROW) {
x += width;
}
setupGalaxy();
}
function setupGalaxy() {
galaxy = new Galaxy(x, y);
}
이제 오른쪽 화살표 키를 누르면 다음 성계를 볼 수 있습니다.
왼쪽 화살표 키를 누르면 우리의 첫 번째 성계를 볼 수 있습니다.
일을 좋게 할 때가 됐어요.
이 물건을 우주처럼 보일 수 있도록 자산을 추가하자.
당신은 p5js sketch에서 자산을 얻을 수 있습니다.
이미지를 불러오고'자산'이라는 그룹을 설정합니다. 새로 만들 때 갤럭시 대상에 전달합니다!
let assets = [];
function preload() {
for (let i = 1; i <= 20; i++) {
assets.push(loadImage(`assets/${i}.png`))
}
console.log(assets);
}
...
function setupGalaxy() {
galaxy = new Galaxy(x, y, assets); // add assets as a constructor argument
}
갤럭시 클래스에서는 자산을 속성으로 설정한 다음 행성 개체를 만들 때 어떤 종류의 행성-어떤 자산을 선택할지 결정하는 새로운 유형 변수를 도입합니다.
class Galaxy {
constructor(x, y, assets) {
this.assets = assets;
this.rng = new Math.seedrandom(`${x} ${y}`);
this.numberOfPlanets = Math.floor(this.rng() * 8); // max 8 planets
this.planets = this.createPlanets();
}
createPlanets() {
let planets = [];
for (let i = 0; i < this.numberOfPlanets; i++) {
let x = this.rng() * width; // anywhere within the width of the screen
let y = this.rng() * height; // anywhere within the height of the screen
let r = this.rng() * 300; // some arbitrary radius
let type = Math.floor(this.rng() * 20);
console.log(type);
planets.push({x,y,r,type});
}
return planets;
}
draw() {
for (let planet of this.planets) {
image(this.assets[planet.type], planet.x, planet.y, planet.r, planet.r);
}
}
}
엉엉!이제 우리는 프로그램이 생성한 우주가 생겼다!
결론
나는 너희들이 이 세대 프로그램의 소개를 좋아하길 바란다. 나는 당연히 그것을 이해하는 것을 좋아한다.나는 이것이 너희들에게 더욱 깊이 탐색하는 동력을 주었고 프로그램 생성의 잠재력을 인식해 주기를 바란다.우리 우주에서 우리가 할 수 있는 것은 아직 매우 많다. 여기에 몇 가지 생각이 있다. 나는 너희들이 무엇을 생각해 낼 수 있는지 매우 보고 싶다!
<script src="Galaxy.js"></script>
class Galaxy {
constructor(x, y) {
this.rng = new Math.seedrandom(`${x} ${y}`);
this.numberOfPlanets = Math.floor(this.rng() * 8);
}
}
let x = 0; // our starting position
let y = 0;
let galaxy;
function setup() {
createCanvas(1280, 720);
galaxy = new Galaxy(x, y);
}
function draw() {
background(0);
}
행성을 만듭니다. rng () 를 사용하여 행성의 속성에 피드 랜덤 값을 생성합니다.나는 이미 이 때문에 목표를 하나 설정했다.속성, 두 가지 새로운 방법createPlanets()와 draw()가 추가되었습니다.
class Galaxy {
constructor(x, y) {
this.rng = new Math.seedrandom(`${x} ${y}`);
this.numberOfPlanets = Math.floor(this.rng() * 8); // max 8 planets
this.planets = this.createPlanets();
}
createPlanets() {
let planets = [];
for (let i = 0; i < this.numberOfPlanets; i++) {
let x = this.rng() * width; // anywhere within the width of the screen
let y = this.rng() * height; // anywhere within the height of the screen
let r = this.rng() * 300; // some arbitrary radius
planets.push({x,y,r});
}
return planets;
}
draw() {
for (let planet of this.planets) {
ellipse(planet.x, planet.y, planet.r, planet.r);
}
}
}
우리는 초도에 추첨에 참가합시다.jslet x = 0; // our starting position
let y = 0;
let galaxy;
function setup() {
createCanvas(1280, 720);
galaxy = new Galaxy(x, y);
}
function draw() {
background(0);
galaxy.draw(); // add this
}
이것이 바로 우리의 첫 번째 성계이다은하계에서 내비게이션을 할 수 있도록 코드를 추가합니다. 그래서 이 설정에서 화살표 키로 이동하기만 하면 됩니다. 그래서 오른쪽 키를 누르면 오른쪽 은하계로 이동하고 위로 버튼을 누르면 위의 은하계로 이동합니다. 등등.
let x = 0; // our starting position
let y = 0;
let galaxy;
function setup() {
createCanvas(1280, 720);
setupGalaxy();
}
function draw() {
background(0);
galaxy.draw();
}
function keyPressed() {
if (keyCode == UP_ARROW) {
y += height;
} else if (keyCode == DOWN_ARROW) {
y -= height;
} else if (keyCode == LEFT_ARROW) {
x -= width;
} else if (keyCode == RIGHT_ARROW) {
x += width;
}
setupGalaxy();
}
function setupGalaxy() {
galaxy = new Galaxy(x, y);
}
이제 오른쪽 화살표 키를 누르면 다음 성계를 볼 수 있습니다.왼쪽 화살표 키를 누르면 우리의 첫 번째 성계를 볼 수 있습니다.
일을 좋게 할 때가 됐어요.
이 물건을 우주처럼 보일 수 있도록 자산을 추가하자.
당신은 p5js sketch에서 자산을 얻을 수 있습니다.
이미지를 불러오고'자산'이라는 그룹을 설정합니다. 새로 만들 때 갤럭시 대상에 전달합니다!
let assets = [];
function preload() {
for (let i = 1; i <= 20; i++) {
assets.push(loadImage(`assets/${i}.png`))
}
console.log(assets);
}
...
function setupGalaxy() {
galaxy = new Galaxy(x, y, assets); // add assets as a constructor argument
}
갤럭시 클래스에서는 자산을 속성으로 설정한 다음 행성 개체를 만들 때 어떤 종류의 행성-어떤 자산을 선택할지 결정하는 새로운 유형 변수를 도입합니다.
class Galaxy {
constructor(x, y, assets) {
this.assets = assets;
this.rng = new Math.seedrandom(`${x} ${y}`);
this.numberOfPlanets = Math.floor(this.rng() * 8); // max 8 planets
this.planets = this.createPlanets();
}
createPlanets() {
let planets = [];
for (let i = 0; i < this.numberOfPlanets; i++) {
let x = this.rng() * width; // anywhere within the width of the screen
let y = this.rng() * height; // anywhere within the height of the screen
let r = this.rng() * 300; // some arbitrary radius
let type = Math.floor(this.rng() * 20);
console.log(type);
planets.push({x,y,r,type});
}
return planets;
}
draw() {
for (let planet of this.planets) {
image(this.assets[planet.type], planet.x, planet.y, planet.r, planet.r);
}
}
}
엉엉!이제 우리는 프로그램이 생성한 우주가 생겼다!
결론
나는 너희들이 이 세대 프로그램의 소개를 좋아하길 바란다. 나는 당연히 그것을 이해하는 것을 좋아한다.나는 이것이 너희들에게 더욱 깊이 탐색하는 동력을 주었고 프로그램 생성의 잠재력을 인식해 주기를 바란다.우리 우주에서 우리가 할 수 있는 것은 아직 매우 많다. 여기에 몇 가지 생각이 있다. 나는 너희들이 무엇을 생각해 낼 수 있는지 매우 보고 싶다!
let assets = [];
function preload() {
for (let i = 1; i <= 20; i++) {
assets.push(loadImage(`assets/${i}.png`))
}
console.log(assets);
}
...
function setupGalaxy() {
galaxy = new Galaxy(x, y, assets); // add assets as a constructor argument
}
class Galaxy {
constructor(x, y, assets) {
this.assets = assets;
this.rng = new Math.seedrandom(`${x} ${y}`);
this.numberOfPlanets = Math.floor(this.rng() * 8); // max 8 planets
this.planets = this.createPlanets();
}
createPlanets() {
let planets = [];
for (let i = 0; i < this.numberOfPlanets; i++) {
let x = this.rng() * width; // anywhere within the width of the screen
let y = this.rng() * height; // anywhere within the height of the screen
let r = this.rng() * 300; // some arbitrary radius
let type = Math.floor(this.rng() * 20);
console.log(type);
planets.push({x,y,r,type});
}
return planets;
}
draw() {
for (let planet of this.planets) {
image(this.assets[planet.type], planet.x, planet.y, planet.r, planet.r);
}
}
}
나는 너희들이 이 세대 프로그램의 소개를 좋아하길 바란다. 나는 당연히 그것을 이해하는 것을 좋아한다.나는 이것이 너희들에게 더욱 깊이 탐색하는 동력을 주었고 프로그램 생성의 잠재력을 인식해 주기를 바란다.우리 우주에서 우리가 할 수 있는 것은 아직 매우 많다. 여기에 몇 가지 생각이 있다. 나는 너희들이 무엇을 생각해 낼 수 있는지 매우 보고 싶다!
고맙습니다. 만약 당신이 나의 끝없는 것을 좋아한다면, 나의 개인 블로그 사이트를 방문하십시오. https://codeheir.com/
Reference
이 문제에 관하여(프로그램에 따라 우주를 생성하다🌌🚀), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/lukegarrigan/procedurally-generate-a-universe-3cn6텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)