これはモンスターと戦闘するプログラムです。
ボタンを押すとまた新たなボタンが作られていくようにしていて
”進む”ボタンの表示まではきちんと動作し、次の”攻撃”ボタンが出てきます。しかしその”攻撃”ボタンを押すと前の進むボタンの動作ttt()と攻撃ボタンの動作AtackFase()が両方行われます。
ボタンを消す時に.removeSuperView()を使っているのですが、
これを使ってボタンを消した場合fildButtonのプロパティは残ってしまうのでしょうか?
他にも要因があるのかもしれません
長いですが記述していることはそんなに難しくないので
ご指摘お願いします。
import Foundation import UIKit class ViewController3: UIViewController { //上からモンスター用、敵hp、name,playlerクラスインスタンス(自分のステータスなどが定義されている) var ImageView = UIImageView() var hpLavel = UILabel() var namelabel = UILabel() var player3 = mystetas() var tikarank = 1 var tikarank2 = 0 var b:Int = 0 //乱数 //フィールドでのボタン定義 let fildButton = UIButton() let fildButoon2 = UIButton() let fildButton3 = UIButton() let fildButton4 = UIButton() //enemyクラスをインスタンス化 var monster1 = sraim() var monster2= minidragon() var monster3= busi() var vsHp:Int = 0 //戦闘時hp var metamol = Anemmystate(name: "不明") //城門選択フォーム(最初に実行) func joumon(){ fildButton.frame = CGRect(x: 50,y: 200,width: 100,height: 21) fildButton.backgroundColor = UIColor.grayColor() fildButton.setTitle("西門", forState: .Normal) fildButton.addTarget(self, action: #selector(ViewController3.west(_:)), forControlEvents: UIControlEvents.TouchUpInside) view.addSubview(fildButton) fildButoon2.frame = CGRect(x: 150,y: 200,width: 100,height: 21) fildButoon2.backgroundColor = UIColor.grayColor() fildButoon2.setTitle("東門", forState: .Normal) fildButoon2.addTarget(self, action: #selector(ViewController3.ertht(_:)), forControlEvents: UIControlEvents.TouchUpInside) view.addSubview(fildButoon2) fildButton3.frame = CGRect(x: 50,y: 400,width: 100,height: 21) fildButton3.backgroundColor = UIColor.grayColor() fildButton4.frame = CGRect(x: 150,y: 400,width: 100,height: 21) fildButton4.backgroundColor = UIColor.grayColor() } //西区の選択画面 func west(sender:AnyObject){ sender as! UIButton reMove() fildButton.setTitle("A地区", forState: .Normal) fildButton.addTarget(self, action: #selector(ViewController3.Forward(_:)), forControlEvents: UIControlEvents.TouchUpInside) view.addSubview(fildButton) fildButoon2.setTitle("B地区", forState: .Normal) fildButoon2.addTarget(self, action: #selector(ViewController3.Forward(_:)), forControlEvents: UIControlEvents.TouchUpInside) view.addSubview(fildButoon2) } //東区の選択画面 func ertht(sender:AnyObject){ sender as! UIButton reMove() fildButton.setTitle("C地区", forState: .Normal) fildButton.addTarget(self, action: #selector(ViewController3.Forward(_:)), forControlEvents: UIControlEvents.TouchUpInside) view.addSubview(fildButton) fildButoon2.setTitle("D地区", forState: .Normal) fildButoon2.addTarget(self, action: #selector(ViewController3.Forward(_:)), forControlEvents: UIControlEvents.TouchUpInside) view.addSubview(fildButoon2) fildButton3.setTitle("E地区", forState: .Normal) fildButton3.addTarget(self, action: #selector(ViewController3.Forward(_:)), forControlEvents: UIControlEvents.TouchUpInside) view.addSubview(fildButton3) } //フィールドコマンド表示 func Forward(sender:UIButton){ reMove() fildButton.setTitle("進む", forState: .Normal) fildButton.addTarget(self, action: #selector(ViewController3.ttt(_:)), forControlEvents: UIControlEvents.TouchUpInside) view.addSubview(fildButton) print("進む出た") } //攻撃ボタン表示 func ATT(sender:UIButton){ reMove() fildButton.setTitle("攻撃", forState: .Normal) fildButton.addTarget(self, action:#selector(ViewController3.AtackFase(_:)),forControlEvents: UIControlEvents.TouchUpInside) view.addSubview(fildButton) print("攻撃ボタン表示") } //攻撃処理 func AtackFase(sender: UIButton){ print("攻撃した") reattack(player3.myap) hphyuji() if vsHp < 1 { //倒した時の処理 print("hp0で進むが出る") hpLavel.text = "" Forward(fildButton) ImageView.removeFromSuperview() }else{ //倒せてない時の処理 print("倒せてない") metamol.attack() print(String(vsHp)) } hphyuji() } func reMove(){ print("remove") fildButton.removeFromSuperview() fildButoon2.removeFromSuperview() fildButton3.removeFromSuperview() fildButton4.removeFromSuperview() } func reattack(ac:Int) { vsHp -= ac if vsHp <= 0{ vsHp = 0 print(String(vsHp) + ",0のはず") } print(String(vsHp)) print("モンスターが攻撃を受けた") } //敵表示 func ttt(sender:UIButton){ tikarank += 1 b = Int(arc4random_uniform(5)) tikarank2 = tikarank + b switch tikarank2 { case (0...6): ImageView.image = UIImage(named: "sraim") srim2.change(player3.mylevel) metamol.statse(monster1) case (7...13): ImageView.image = UIImage(named: "mini") mini2.change(player3.mylevel) metamol.statse(monster2) case (14...17): ImageView.image = UIImage(named: "busi") busi2.change(player3.mylevel) metamol.statse(monster3) default : srim2.change(player3.mylevel) ImageView.image = UIImage(named: "sraim") metamol.statse(monster1) } vsHp = metamol.hitpoint view.addSubview(ImageView) print("vsHPは" + String(vsHp)) hphyuji() ATT(fildButton) } //hp表示 func hphyuji(){ hpLavel.text = String(vsHp) + "/" + String(metamol.maxpoint) namelabel.text = metamol.name + ":" + String(metamol.anlevel) + "Level" view.addSubview(hpLavel) view.addSubview(namelabel) print("表示した") } class Anemmystate { var name:String var anap:Int = 0 //攻撃 var andp:Int = 0//防御 var maxpoint:Int = 0 var anlevel:Int = 1{ didSet{ maxpoint = anlevel * 5 hitpoint = anlevel * 5 anap = anlevel * 1 } } var hitpoint:Int = 0 var player = mystetas() init (name:String,anlevel:Int = 1) { self.name = name self.anlevel = anlevel } func attack() { player.myhp -= anap print("プレイヤーが攻撃を受けた") } func statse(enemy: Anemmystate){ self.name = enemy.name self.anlevel = enemy.anlevel self.anap = enemy.anap self.hitpoint = enemy.hitpoint self.maxpoint = enemy.maxpoint print("ステータスリセット") } } class sraim:Anemmystate{ override var anlevel: Int{ didSet{ maxpoint = anlevel * 5 hitpoint = anlevel * 5 anap = anlevel * 1 } } init(anlevel:Int = 1){ super.init(name: "スライム", anlevel: anlevel) } var a:Int = 0 func change(plylevel:Int){ anlevel = plylevel + Int(arc4random_uniform(3)) } } class minidragon:Anemmystate{ override var anlevel: Int{ didSet{ maxpoint = anlevel * 7 hitpoint = anlevel * 7 anap = anlevel * 2 } } init(anlevel:Int = 1){ super.init(name: "ミニマムドラゴン", anlevel: anlevel) } var a:Int = 0 func change(plylevel:Int){ anlevel = plylevel + Int(arc4random_uniform(3)) } } class busi:Anemmystate{ override var anlevel: Int{ didSet{ maxpoint = anlevel * 10 hitpoint = anlevel * 10 anap = anlevel * 5 } } init(anlevel:Int = 1){ super.init(name: "武士", anlevel: anlevel) } var a:Int = 0 func change(plylevel:Int){ anlevel = plylevel + Int(arc4random_uniform(3)) } } //プレイヤークラス class mystetas {---} override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view, typically from a nib. joumon() hpLavel.frame = CGRect(x: 80,y: 80, width: 200,height: 21) hpLavel.textColor = UIColor.blackColor() namelabel.frame = CGRect(x: 120,y: 120, width: 200,height: 21) ImageView.frame = CGRect(x: 120,y: 100,width: 150,height: 200) } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } }
print結果
最初に進むボタンが表示され、そのボタンを押した瞬間の結果から書いていきます。
remove
remove
進む出た
ステータスリセット
5
表示した
remove
攻撃ボタン表示
・次に表示された攻撃ボタンを押した時
remove
remove
進む出た
ステータスリセット
10
表示した
remove
攻撃ボタン表示
攻撃した
9
モンスターが攻撃を受けた
表示した
倒せてない
プレイヤーが攻撃を受けた
表示した
9
・以降進むボタンは出てこず、表示は攻撃ボタンのままで、結果も同じです。
swift2 xcode7利用
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。