processing으로 탈출 게임을 만들 때 참조
7228 단어 processing
개요
나중에 추가합니다.
Processing으로 게임을 만들 때 혼란스러운 곳을 하나의 기사에 모아 써 둡니다.
processing ver.3.3.5 사용
전제로서, 예에 사용하는 탈출 게임의 구조는 다음과 같이 합니다.
화면 전환 - 한 방으로 이동
배열과 후술하는 플래그를 사용해 구현합니다.
방별로 배열을 만들어 장면별 이미지를 저장합니다.
PImage[] room1 = new PImage[4];
PImage[] room2 = new PImage[4];
PImage[] room3 = new PImage[4];
room1[0] = loadImage("00.png");
...
이미지 파일의 이름을 규칙적으로 명명하여 loadImage
명령을 간결하게 만들 수 있습니다.
방 안에서 장면을 전환하는 경우에는 image()
로 표시시키는 배열 이미지의 인덱스를 조작합니다
예for (int i=0 ; i<4;i++){
image(room[i],0,0);
}
여기서는 a와 d로 방 안을 이동하면 설정하므로 keyPressed
함수로 인덱스를 조작합니다.
void keyPressed() {
switch(key) {
case 'a' :
//bamen idou key
//bamenNo manage
if (bamenNo != 3) {
bamenNo +=1;
} else {
bamenNo = 0;
}
break;
case 'd' :
//bamen idou key
if (bamenNo == 0) {
bamenNo =3;
} else {
bamenNo -= 1;
}
break;
변경된 색인은 다음 이미지 표시 관리 기능의 표시에 반영됩니다.
if 문 안의 함수에 각각 image(); 등이 저장되어 있습니다
void mainroom() {
reset();
if (check_whereRoom == 0) {
gameStart();
} else if (check_whereRoom == 1) game();
else if (check_whereRoom == 2) gameClear();
else {
text("noRoom", 60, 30);
}
}
플래그 관리 - 방과 방 사이를 이동
플래그를 사용하여 관리
반환 값이 있는 함수를 사용하여 플래그 관리
반환 값이 있는 함수는 void
대신 반환 형식을 함수 이름 앞에 넣습니다.
void setup(){
}
void draw(){
print(nibai());
//関数nibaiを実行すると戻り値tの値が帰ってくる
//
}
int nibai(){ //int型の戻り値を持つ関数nibai
int t = 10;
t = t*2; //tを2倍してtに代入する
return t; //int型 tの値を戻り値として渡す
//この場合最初のtの中身は10なので戻り値は2倍された20となる
}
이것을 사용해 「지금 방 이동할 수 있는 장면에 있는지 판정해, 이동할 수 있으면 true, 할 수 없으면 false라고 돌려주는 함수」를 준비한다
boolean checkFlag2() {
boolean Cflag = false;
if (check_whereRoom ==0 && bamenNo == 2) {
Cflag = true;
}else if (check_whereRoom ==1 && bamenNo == 3) {
Cflag = true;
} else if (check_whereRoom ==2 && bamenNo == 0) {
Cflag = true;
} else Cflag = false;
return Cflag;
}
방을 이동할 때는 "지금 어느 방에 있는지를 저장하는 함수"와 함께 사용
...
case ' ' :
//room idou key
if (check_whereRoom == 0 && checkFlag2() == true ) {
check_whereRoom = 1;
bamenNo = 1;
} else if (checkFlag2()== true&&check_whereRoom == 1) {
check_whereRoom = 2;
} else if (checkFlag2()== true&&check_whereRoom == 2) {
check_whereRoom = 0;
}
...
오래된 플래그 관리 함수
방 이동 가능한 장면에 있는지 여부를 두 개의 플래그로 판정하는 함수
void checkFlag() {
if (check_whereRoom ==0) {
//今どの部屋にいるか
check_game= false;
check_clear = false;
if (bamenNo == 2) check_start = true;
//どの場面にいるか
else check_start = false;
}
else if (check_whereRoom ==1) {
check_start= false;
check_clear = false;
if (bamenNo == 3) check_game = true;
else check_game = false;
}
else if (check_whereRoom ==2) {
check_start= false;
check_game = false;
if (bamenNo == 0) check_clear = true;
else check_clear= false;
}
}
case ' ' :
//room idou key
if (check_start == true) {
check_whereRoom = 1;
bamenNo = 1;
} else if (check_game == true) {
check_whereRoom = 2;
} else if (check_clear == true) {
check_whereRoom = 0;
}
break;
텍스트 상자
Interfascia라는 라이브러리 사용
샘플 코드 보기
textfieldimport interfascia.*;
GUIController c;
IFTextField t;
IFLabel l;
IFTextField는 텍스트 상자를 표시하는 형식
IFLabel은 텍스트 상자의 레이블과 관련된 유형입니다.
void setup() {
size(200, 100);
background(200);
c = new GUIController(this);
t = new IFTextField("Text Field", 25, 30, 150);
l = new IFLabel("", 25, 70);
//IFTextField("テキストボックスの名前",左上のX座標,左上のY座標,ボックスの幅);
c.add(t);
c.add(l);
//.addで画面上に当該オブジェクトを表示、機能をスタートさせる.
//IFTextField型のオブジェクトだけはsetup関数以外の場所で
//実行しようとするとフリーズしてしまう。なぜだ
t.addActionListener(this);
}
void draw() {
background(200);
}
void actionPerformed(GUIEvent e) {
if (e.getMessage().equals("Completed")) {
//e.getMessage()の中身がCompletedだったとき
l.setLabel(t.getValue());
//テキストボックスのラベル名をt.getValue()(=ボックスに入力した文字)にする
}
}
e.getMessage()
는 현재 「박스에 문자를 쳤을 때의 "Modified"」 「박스내에서 엔터키를 누른 순간의 "Completed"」의 2개의 상태를 취하는 것을 확인할 수 있다
임의의 문자열을 넣을 때 라벨을 표시하려면
String pass = onigiri;
void actionPerformed(GUIEvent e) {
if (e.getMessage().equals("Completed") ) {
//EnterKeyが押されたとき
if (t.getValue().equals(pass) ) {
//且つボックスの入力とpass変数の中身が一致するとき
l.setLabel("gohan");
//ラベルをgohanに書き換える
} else {
l.setLabel("noooooo");
//一致しないときは拒絶のメッセージを出す
}
}
}
.equals(Str)
는 String 를 비교할 때 사용해, 전후의 String 가 일치해 있을지 어떨지를 판정합니다
참고, interfascia의 공식 사이트
특정 장면에서만 텍스트 상자를 내고 싶습니다.
괜찮은 수단으로는 출입이 어려웠기 때문에, 조금 억지로.
숨기고 싶을 때는 박스와 라벨 모두 setPosition()
등을 이용하여 좌표를 화면 밖에 (width*2,height*2)
이제 겉보기에는 텍스트 상자를 숨길 수 있습니다.
...
int intNo = 0;
if (intNo != 0){
setPosition(width*2,height*2);
}else{
setPosition(150,200);
}
무작위 대사
STR 형 배열을 사용하여 해결을 시도합니다.
Str[] serifu = new Str[7];
//Str型の配列 serifuを用意
serifu[0] = "hello";
…
int r = round(random(0,6.99));
//ランダム関数の数字を整数に丸めてint型に格納します
text(serif[r],0,0);
//配列の中のランダムなセリフを表示する
일본어를 사용하는 경우는 에디터의 폰트를 일본어 대응으로 하는 방법이 있습니다
동영상 재생
Processing video 라이브러리 사용
…
참고 http://mslabo.sakura.ne.jp/WordPress/make/processing%E3%80%80%E9%80%86%E5%BC%95%E3%81%8D%E3%83%AA%E3% 83%95%E3%82%A1%E3%83%AC%E3%83%B3%E3%82%B9/%E5%8B%95%E7%94%BB%E3%82%92%E5%86 %8D%E7%94%9F%E3%81%99%E3%82%8B%E3%81%AB%E3%81%AF/
BGM을 흘리다
Minim 라이브러리 사용
Minim musik =new Minim(this);
//初期化
AudioPlayer player;
void setup() {
player = musik.loadFile("音声ファイルの名前");
//音声を読み込む
}
void draw() {
player.play( ) ;
//再生。最後まで再生し終わるとストップする
}
…
참고
ht tp // r ぢ 멘시온. xsrv. jp/c ぁせ s_j/미니 m/
Reference
이 문제에 관하여(processing으로 탈출 게임을 만들 때 참조), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/gusghost/items/f97c3212a519b3a6c331
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
PImage[] room1 = new PImage[4];
PImage[] room2 = new PImage[4];
PImage[] room3 = new PImage[4];
room1[0] = loadImage("00.png");
...
for (int i=0 ; i<4;i++){
image(room[i],0,0);
}
void keyPressed() {
switch(key) {
case 'a' :
//bamen idou key
//bamenNo manage
if (bamenNo != 3) {
bamenNo +=1;
} else {
bamenNo = 0;
}
break;
case 'd' :
//bamen idou key
if (bamenNo == 0) {
bamenNo =3;
} else {
bamenNo -= 1;
}
break;
void mainroom() {
reset();
if (check_whereRoom == 0) {
gameStart();
} else if (check_whereRoom == 1) game();
else if (check_whereRoom == 2) gameClear();
else {
text("noRoom", 60, 30);
}
}
플래그를 사용하여 관리
반환 값이 있는 함수를 사용하여 플래그 관리
반환 값이 있는 함수는
void
대신 반환 형식을 함수 이름 앞에 넣습니다.void setup(){
}
void draw(){
print(nibai());
//関数nibaiを実行すると戻り値tの値が帰ってくる
//
}
int nibai(){ //int型の戻り値を持つ関数nibai
int t = 10;
t = t*2; //tを2倍してtに代入する
return t; //int型 tの値を戻り値として渡す
//この場合最初のtの中身は10なので戻り値は2倍された20となる
}
이것을 사용해 「지금 방 이동할 수 있는 장면에 있는지 판정해, 이동할 수 있으면 true, 할 수 없으면 false라고 돌려주는 함수」를 준비한다
boolean checkFlag2() {
boolean Cflag = false;
if (check_whereRoom ==0 && bamenNo == 2) {
Cflag = true;
}else if (check_whereRoom ==1 && bamenNo == 3) {
Cflag = true;
} else if (check_whereRoom ==2 && bamenNo == 0) {
Cflag = true;
} else Cflag = false;
return Cflag;
}
방을 이동할 때는 "지금 어느 방에 있는지를 저장하는 함수"와 함께 사용
...
case ' ' :
//room idou key
if (check_whereRoom == 0 && checkFlag2() == true ) {
check_whereRoom = 1;
bamenNo = 1;
} else if (checkFlag2()== true&&check_whereRoom == 1) {
check_whereRoom = 2;
} else if (checkFlag2()== true&&check_whereRoom == 2) {
check_whereRoom = 0;
}
...
오래된 플래그 관리 함수
방 이동 가능한 장면에 있는지 여부를 두 개의 플래그로 판정하는 함수
void checkFlag() {
if (check_whereRoom ==0) {
//今どの部屋にいるか
check_game= false;
check_clear = false;
if (bamenNo == 2) check_start = true;
//どの場面にいるか
else check_start = false;
}
else if (check_whereRoom ==1) {
check_start= false;
check_clear = false;
if (bamenNo == 3) check_game = true;
else check_game = false;
}
else if (check_whereRoom ==2) {
check_start= false;
check_game = false;
if (bamenNo == 0) check_clear = true;
else check_clear= false;
}
}
case ' ' :
//room idou key
if (check_start == true) {
check_whereRoom = 1;
bamenNo = 1;
} else if (check_game == true) {
check_whereRoom = 2;
} else if (check_clear == true) {
check_whereRoom = 0;
}
break;
텍스트 상자
Interfascia라는 라이브러리 사용
샘플 코드 보기
textfieldimport interfascia.*;
GUIController c;
IFTextField t;
IFLabel l;
IFTextField는 텍스트 상자를 표시하는 형식
IFLabel은 텍스트 상자의 레이블과 관련된 유형입니다.
void setup() {
size(200, 100);
background(200);
c = new GUIController(this);
t = new IFTextField("Text Field", 25, 30, 150);
l = new IFLabel("", 25, 70);
//IFTextField("テキストボックスの名前",左上のX座標,左上のY座標,ボックスの幅);
c.add(t);
c.add(l);
//.addで画面上に当該オブジェクトを表示、機能をスタートさせる.
//IFTextField型のオブジェクトだけはsetup関数以外の場所で
//実行しようとするとフリーズしてしまう。なぜだ
t.addActionListener(this);
}
void draw() {
background(200);
}
void actionPerformed(GUIEvent e) {
if (e.getMessage().equals("Completed")) {
//e.getMessage()の中身がCompletedだったとき
l.setLabel(t.getValue());
//テキストボックスのラベル名をt.getValue()(=ボックスに入力した文字)にする
}
}
e.getMessage()
는 현재 「박스에 문자를 쳤을 때의 "Modified"」 「박스내에서 엔터키를 누른 순간의 "Completed"」의 2개의 상태를 취하는 것을 확인할 수 있다
임의의 문자열을 넣을 때 라벨을 표시하려면
String pass = onigiri;
void actionPerformed(GUIEvent e) {
if (e.getMessage().equals("Completed") ) {
//EnterKeyが押されたとき
if (t.getValue().equals(pass) ) {
//且つボックスの入力とpass変数の中身が一致するとき
l.setLabel("gohan");
//ラベルをgohanに書き換える
} else {
l.setLabel("noooooo");
//一致しないときは拒絶のメッセージを出す
}
}
}
.equals(Str)
는 String 를 비교할 때 사용해, 전후의 String 가 일치해 있을지 어떨지를 판정합니다
참고, interfascia의 공식 사이트
특정 장면에서만 텍스트 상자를 내고 싶습니다.
괜찮은 수단으로는 출입이 어려웠기 때문에, 조금 억지로.
숨기고 싶을 때는 박스와 라벨 모두 setPosition()
등을 이용하여 좌표를 화면 밖에 (width*2,height*2)
이제 겉보기에는 텍스트 상자를 숨길 수 있습니다.
...
int intNo = 0;
if (intNo != 0){
setPosition(width*2,height*2);
}else{
setPosition(150,200);
}
무작위 대사
STR 형 배열을 사용하여 해결을 시도합니다.
Str[] serifu = new Str[7];
//Str型の配列 serifuを用意
serifu[0] = "hello";
…
int r = round(random(0,6.99));
//ランダム関数の数字を整数に丸めてint型に格納します
text(serif[r],0,0);
//配列の中のランダムなセリフを表示する
일본어를 사용하는 경우는 에디터의 폰트를 일본어 대응으로 하는 방법이 있습니다
동영상 재생
Processing video 라이브러리 사용
…
참고 http://mslabo.sakura.ne.jp/WordPress/make/processing%E3%80%80%E9%80%86%E5%BC%95%E3%81%8D%E3%83%AA%E3% 83%95%E3%82%A1%E3%83%AC%E3%83%B3%E3%82%B9/%E5%8B%95%E7%94%BB%E3%82%92%E5%86 %8D%E7%94%9F%E3%81%99%E3%82%8B%E3%81%AB%E3%81%AF/
BGM을 흘리다
Minim 라이브러리 사용
Minim musik =new Minim(this);
//初期化
AudioPlayer player;
void setup() {
player = musik.loadFile("音声ファイルの名前");
//音声を読み込む
}
void draw() {
player.play( ) ;
//再生。最後まで再生し終わるとストップする
}
…
참고
ht tp // r ぢ 멘시온. xsrv. jp/c ぁせ s_j/미니 m/
Reference
이 문제에 관하여(processing으로 탈출 게임을 만들 때 참조), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/gusghost/items/f97c3212a519b3a6c331
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
import interfascia.*;
GUIController c;
IFTextField t;
IFLabel l;
void setup() {
size(200, 100);
background(200);
c = new GUIController(this);
t = new IFTextField("Text Field", 25, 30, 150);
l = new IFLabel("", 25, 70);
//IFTextField("テキストボックスの名前",左上のX座標,左上のY座標,ボックスの幅);
c.add(t);
c.add(l);
//.addで画面上に当該オブジェクトを表示、機能をスタートさせる.
//IFTextField型のオブジェクトだけはsetup関数以外の場所で
//実行しようとするとフリーズしてしまう。なぜだ
t.addActionListener(this);
}
void draw() {
background(200);
}
void actionPerformed(GUIEvent e) {
if (e.getMessage().equals("Completed")) {
//e.getMessage()の中身がCompletedだったとき
l.setLabel(t.getValue());
//テキストボックスのラベル名をt.getValue()(=ボックスに入力した文字)にする
}
}
String pass = onigiri;
void actionPerformed(GUIEvent e) {
if (e.getMessage().equals("Completed") ) {
//EnterKeyが押されたとき
if (t.getValue().equals(pass) ) {
//且つボックスの入力とpass変数の中身が一致するとき
l.setLabel("gohan");
//ラベルをgohanに書き換える
} else {
l.setLabel("noooooo");
//一致しないときは拒絶のメッセージを出す
}
}
}
...
int intNo = 0;
if (intNo != 0){
setPosition(width*2,height*2);
}else{
setPosition(150,200);
}
STR 형 배열을 사용하여 해결을 시도합니다.
Str[] serifu = new Str[7];
//Str型の配列 serifuを用意
serifu[0] = "hello";
…
int r = round(random(0,6.99));
//ランダム関数の数字を整数に丸めてint型に格納します
text(serif[r],0,0);
//配列の中のランダムなセリフを表示する
일본어를 사용하는 경우는 에디터의 폰트를 일본어 대응으로 하는 방법이 있습니다
동영상 재생
Processing video 라이브러리 사용
…
참고 http://mslabo.sakura.ne.jp/WordPress/make/processing%E3%80%80%E9%80%86%E5%BC%95%E3%81%8D%E3%83%AA%E3% 83%95%E3%82%A1%E3%83%AC%E3%83%B3%E3%82%B9/%E5%8B%95%E7%94%BB%E3%82%92%E5%86 %8D%E7%94%9F%E3%81%99%E3%82%8B%E3%81%AB%E3%81%AF/
BGM을 흘리다
Minim 라이브러리 사용
Minim musik =new Minim(this);
//初期化
AudioPlayer player;
void setup() {
player = musik.loadFile("音声ファイルの名前");
//音声を読み込む
}
void draw() {
player.play( ) ;
//再生。最後まで再生し終わるとストップする
}
…
참고
ht tp // r ぢ 멘시온. xsrv. jp/c ぁせ s_j/미니 m/
Reference
이 문제에 관하여(processing으로 탈출 게임을 만들 때 참조), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/gusghost/items/f97c3212a519b3a6c331
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Minim 라이브러리 사용
Minim musik =new Minim(this);
//初期化
AudioPlayer player;
void setup() {
player = musik.loadFile("音声ファイルの名前");
//音声を読み込む
}
void draw() {
player.play( ) ;
//再生。最後まで再生し終わるとストップする
}
…
참고
ht tp // r ぢ 멘시온. xsrv. jp/c ぁせ s_j/미니 m/
Reference
이 문제에 관하여(processing으로 탈출 게임을 만들 때 참조), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/gusghost/items/f97c3212a519b3a6c331텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)