코 코스 크 리 에이 터 사격 게임 만 들 기
게임 자원
포탑 이 돌다
기 제 는 이전 손잡이 인 스 턴 스 의 소형 차 와 마찬가지 로 touch move 로 터치 사건 을 감청 합 니 다.
터치 위치 획득4.567917.위 치 를 통 해 signAngle 방법 으로 이 위치 와 cc.v2(1,0)위치의 각도 차 이 를 구 합 니 다(마이너스 번 호 를 추가 하고 얻 은 시계 반대 방향 은 마이너스 이 며,할당 angle 역 지침 은 플러스 입 니 다)4.567917.원 하 는 각 도 는 최종 각도 이다
onLoad(){
// 90
this.node.angle=90;
this.node.on('touchstart',this.onTouchStart,this);
this.node.on('touchmove',this.onTouchMove,this);
this.node.on('touchend',this.onTouchEnd,this);
this.node.on('touchconcel',this.onTouchConcel,this);
}
onTouchStart(e:cc.Event.EventTouch){
//
this.starPos=this.node.parent.convertToNodeSpace(e.getLocation());
//
this.starAngle=this.node.angle;
}
onTouchEnd(e:cc.Event.EventTouch){
}
onTouchMove(e:cc.Event.EventTouch){
//
let pos:cc.Vec2=this.node.parent.convertToNodeSpace(e.getLocation());
//
//angle
let sweep_radian=pos.signAngle(this.starPos);//pos starPose p s
let sweep_angle=sweep_radian*180/Math.PI;//
//
let angle=this.starAngle-sweep_angle;
// 45~135
if(angle<45)angle=45;
if(angle>135)angle=135;
cc.log(" :"+sweep_angle+" :"+angle);
this.node.angle=angle;
}
동적 생 성 탄알
onTouchEnd(e:cc.Event.EventTouch){
this.fire();
}
onTouchConcel(e:cc.Event.EventTouch){
}
fire(){
if(this.bulleteicon==null)return;
let bullet:cc.Node=new cc.Node();
let sprite:cc.Sprite=bullet.addComponent(cc.Sprite);
sprite.spriteFrame=this.bulleteicon;
//
bullet.parent=this.node.parent;
//
let ration=this.node.angle*Math.PI/180;
let direction=cc.v2(Math.cos(ration),Math.sin(ration));
bullet.angle=this.node.angle;
let r=100;
bullet.setPosition(cc.v3(r*direction.x,r*direction.y,0));
//
let script=bullet.addComponent(Buletet);
script.explodeImg=this.explodeImg;
script.direction=direction;
}
start () {
this.schedule(this.onTimer,0.01);
}
onTimer(){
if(this.node.y>300){
this.unschedule(this.onTimer);
this.explode();
return;
}
let dx=this.direction.x*5;
let dy=this.direction.y*5;
this.node.y+=dy;
this.node.x+=dx;
}
explode(){
let sp:cc.Sprite=this.getComponent(cc.Sprite);
sp.spriteFrame=this.explodeImg;
//
this.node.scale=0.1;
//
let self=this;
cc.tween(this.node)
.to(0.5,{scale:1,opacity:0})
.call(function(){
self.afterExplode();
})
.start();
}
afterExplode(){
this.node.destroy();
}
이번 버그:가 져 온 클래스 이름과 파일 이름 이 다 릅 니 다.이름 을 바 꾸 면 코드 의 클래스 이름 이 자동 으로 수정 되 지 않 습 니 다.두 번 수정 해 야 합 니 다
총알 과 표적 의 상대 적 인 위 치 를 계산 하고 범위 보다 작 으 면 명중 표적 으로 판단 하여 명중 한 조작 을 집행 한다.그렇지 않 으 면 명중 하지 않 은 것 으로 판단 하고 명중 하지 않 은 조작 을 집행 한다.
스 크 립 트 는 대상 노드 에 전송 하여 target 속성 을 증가 시 켜 야 합 니 다.
@property(cc.SpriteFrame)
explodeImg: cc.SpriteFrame = null;
direction: cc.Vec2 = null;
target: cc.Node = null;
onLoad() {
}
start() {
this.schedule(this.onTimer, 0.01);
}
onTimer() {
if (this.node.y > 350) {
if (this.isHit()) {
//
this.explode();
console.log(" ");
}
else {
console.log(" ");
this.disMiss();
}
this.unschedule(this.onTimer);
return;
}
let dx = this.direction.x * 5;
let dy = this.direction.y * 5;
this.node.y += dy;
this.node.x += dx;
}
//
isHit(): boolean {
let targetPos: cc.Vec2 = this.geWorldLocation(this.target);
let selfPos: cc.Vec2 = this.geWorldLocation(this.node);
let distance = Math.abs(targetPos.x - selfPos.x);
console.log(" x=" + targetPos.x + " , x=" + selfPos.x);
if (distance < 50) {
return true;
}
else {
return false;
}
}
explode() {
let sp: cc.Sprite = this.getComponent(cc.Sprite);
sp.spriteFrame = this.explodeImg;
//
this.node.scale = 0.1;
//
let self = this;
cc.tween(this.node)
.to(0.5, { scale: 1, opacity: 0 })
.call(function () {
self.disMiss();
})
.start();
}
geWorldLocation(node: cc.Node): cc.Vec2 {
let pos = node.getPosition();
// node.parent。
return node.parent.convertToWorldSpaceAR(pos);
}
disMiss() {
this.node.destroy();
}
이번 버그:세계 좌 표를 가 져 올 때 아버지 노드 의 좌표 계 를 호출 하지 않 고 현재 노드 의 좌표 계 를 사 용 했 기 때문에 돌아 온 것 은 자신의 현재 좌표계 의 값 이다.세계 좌 표를 바 꾸 는 방법 을 기억 하 십시오.호출 자 는 현재 노드 의 좌표계 입 니 다.보통 부모 노드 return node.parent.convertToWorld SpaceAR(pos)입 니 다.(pos)앵 커 포인트
효과 증가
과녁 의 노드 에 스 크 립 트 를 추가 하여 이동 을 제어 하고 좌우 로 이동 합 니 다.
동시에 총알 이 명중 하면 문자 알림 효과 가 증가 합 니 다.
텍스트 알림:
cheer() {
//
let node: cc.Node = new cc.Node();
node.parent = this.node.parent;// ,
let label: cc.Label = node.addComponent(cc.Label);
label.string = "+10 ";
// 、
node.setPosition(cc.v3(0, 250, 0));
node.opacity = 200;
node.color = new cc.Color(255, 0, 0);
//
cc.tween(node)
.to(0.5, { scale: 1.5 })
.to(0.2, { opacity: 0 })
.call(function () {
node.destroy();
})
.start();
}
표적 이동
update (dt) {
let speed=3;
if(this.isLeft){
speed=-speed;
}
this.node.x+=speed;
if(this.isLeft&&this.node.x<-350){
this.isLeft=false;
}
if(!this.isLeft&&this.node.x>350){
this.isLeft=true;
}
}
탄약 고 표시 증가호출 방법 은 두 가지 가 있 습 니 다.하 나 는 포탑 스 크 립 트 에서 탄약 고 노드 를 가 져 오기 위해 호출 되 고 다른 하 나 는 공공 클래스 를 설정 하 는 것 입 니 다.(정적 변수)onLoad()방법 에서 이 노드 를 초기 화하 고 직접 호출 합 니 다.후 자 를 쓰다.
@property(cc.SpriteFrame)
bulleteIcon: cc.SpriteFrame = null;
capacity: number = 10;
stockNumber: number = 10;
onLoad() {
let space: number = this.node.width / this.capacity;
for (let i = 0; i < this.capacity; i++) {
//
let bulleteNode: cc.Node = new cc.Node();
let bulleteSprite: cc.Sprite = bulleteNode.addComponent(cc.Sprite);
bulleteSprite.spriteFrame = this.bulleteIcon;
this.node.addChild(bulleteNode);
//
bulleteNode.x += space * i + 10;
bulleteNode.y = 0;
}
}
start() {
}
consum(num: number) {
this.stockNumber -= num;
if (this.stockNumber < 0) {
this.stockNumber = 0;
}
this.display();
}
display() {
let nodes: cc.Node[] = this.node.children;
console.log(nodes.length);
for(let i=0;i<nodes.length;i++){
if(i>=this.stockNumber){
nodes[i].active=false;
}
}
}
공통 공통 클래스
// , , 、 Common
static ammo:Ammo=null;
onLoad() {
Common.ammo=cc.find('Canvas/ ').getComponent('Ammo');
console.log(Common.ammo);
}
여기 버그:cc.find()방법 에 서 는 나눗셈 의 슬 래 쉬 를 사용 하 는 것 을 기억 합 니 다.
총알 소 진 제시 점수
onLoad () {
let replay:cc.Node=cc.find('Canvas/ / ');
console.log(replay);
replay.on('touchstart',this.dismiss,this);
this.node.on('touchstart',this.onTouchdisable,this);
this.node.on('touchmove',this.onTouchdisable,this);
this.node.on('touchend',this.onTouchdisable,this);
}
//
show(){
this.node.active=true;
let scoreNode : cc.Node = cc.find(' / ', this.node);
let scoreLabel : cc.Label = scoreNode.getComponent(cc.Label);
scoreLabel.string = Common.score + ' ';
}
//
dismiss(){
this.node.active=false;
}
//
onTouchdisable(e:cc.Event.EventTouch){
e.stopPropagation();
}
start () {
}
일반 스 크 립 트
// , , 、 Common
static ammo:Ammo=null;
static score : number = 0;
static resultdialog : ResultDialog = null;
onLoad() {
Common.resultdialog=cc.find('Canvas/ ').getComponent('ResultDialog');
Common.ammo=cc.find('Canvas/ ').getComponent('Ammo');
}
Bullete 방법 중 점수 증가
if (this.isHit()) {
//
this.explode();
// +10
this.cheer();
// +10
Common.score += 10;
console.log(" ");
}
게임 재 개이 작은 게임 은 간단 합 니 다.리 셋 은 탄약 고 노드 만 리 셋 하면 되 기 때문에 reset 방법 은 Ammo 스 크 립 트 에 넣 습 니 다.
공공 클래스 에서 Ammo 대상 을 만 들 고 정적 방법 을 설정 하 며 득점 을 초기 화하 고 Ammo 를 호출 하 는 reset 방법 을 설정 합 니 다.
Ammo(탄약 고 클래스)스 크 립 트 추가
reset(){
this.stockNumber=this.capacity;
this.display();
}
Common 스 크 립 트 변경
// , , 、 Common
static ammo:Ammo=null;
static score : number = 0;
static resultdialog : ResultDialog = null;
onLoad() {
Common.resultdialog=cc.find('Canvas/ ').getComponent('ResultDialog');
Common.ammo=cc.find('Canvas/ ').getComponent('Ammo');
console.log(Common.ammo);
}
static resetGame() {
Common.score=0;
Common.ammo.reset();
}
디 테 일 추가게임 소리 및 포탑 활성화 변화 증가
1.포탑 스 크 립 트 속성 증가
//
@property(cc.AudioClip)
audioFire: cc.AudioClip = null;
@property(cc.AudioClip)
audioExplode: cc.AudioClip = null;
//
@property(cc.SpriteFrame)
iconNormal: cc.SpriteFrame = null;
@property(cc.SpriteFrame)
iconActive: cc.SpriteFrame = null;
그림 전환
onTouchStart(e: cc.Event.EventTouch) {
//
this.node.getComponent(cc.Sprite).spriteFrame = this.iconActive;
onTouchEnd(e: cc.Event.EventTouch) {
//
this.node.getComponent(cc.Sprite).spriteFrame = this.iconNormal;
}
음향 효과 재생
fire(){
//
script.audioExplode = this.audioExplode;
if (this.audioFire != null) {
cc.audioEngine.play(this.audioFire, false, 1);
}
}
오디 오 재생 방법:=cc.audioEngine.play(this.audioFire,false,1);==두 번 째 매개 변 수 는 순환 재생 여부 이 고 세 번 째 매개 변 수 는 음량 크기 입 니 다.총알 각본
//
@property(cc.SpriteFrame)
explodeImg: cc.SpriteFrame = null;
if(this.audioExplode!=null){
cc.audioEngine.play(this.audioExplode,false,1);
}
이상 은 코 코스 크 리 에이 터 가 사격 게임 을 만 드 는 상세 한 내용 입 니 다.코 코스 크 리 에이 터 사격 게임 에 관 한 자 료 는 저희 의 다른 관련 글 을 주목 해 주세요!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
코 코스 크 리 에이 터 사격 게임 만 들 기운동 을 제어 하면 새 스 크 립 트 를 가 져 올 수 있 고 이 스 크 립 트 를 동적 생 성 노드 의 구성 요소 에 추가 할 수 있 습 니 다 과녁 의 노드 에 스 크 립 트 를 추가 하여 이동 을 제어 하고 좌...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.