#Swift
#lua

当たり判定が狭い広告の判定を検証してみた

はじめまして。とょしんです。

Qiitaへの記事の投稿は初めてなのですが、

今日はAdvent Calendar15日目の記事として投稿させていただきます。


いや絶対押してんじゃん

さて、ネットサーフィンをいていると時折遭遇するのが✗の小さすぎる広告。あの当たり判定の小さすぎるButtonにとって私は日々苦しめられています。あの広告によって、世界中で一体どれだけの時間が奪われているのでしょうか。

スクリーンショット 2018-12-15 23.18.28.png

また、あのボタンの当たり判定は本当にあのButtonの大きさのとおりなのでしょうか。かなり怪しいと思います。今回は実際に検証してみました。


擬似的な広告で検証してみる。

広告のButtonの当たり判定が小さすぎると感じるのは気の所為で、実は自分の指のAIM力不足だった。ということも十分考えられたので

Xcodeで擬似的な広告を消すだけのiOSアプリを作成しました。わざわざ説明しなくてもいいかなとは思います。


ViewController.swift

import UIKit

class ViewController: UIViewController {

@IBOutlet weak var labelA: UILabel!
@IBOutlet weak var buttonA: UIButton!
@IBOutlet weak var viewA: UIButton!

@IBAction func tappedHide(_ sender: Any) {
buttonA.isHidden = true
viewA.isHidden = true
labelA.text = "Tapped!"
}
override func viewDidLoad() {

super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
}

}


スクリーンショット 2018-12-15 23.17.18.png

iPhoneの実機実行してみるとびっくり。私の大きな親指でも想像よりも難無くピンポイントに✗ボタンを押せてしまいました。想像より遥かに正確に✗ボタンに指が届きます。人間の指と脳って案外正確なものですね。また一つ自分のiPhoneに無駄なアプリがが増えていきます


実際の広告で✗ボタンの当たり判定を検証する

では一体あの✗ボタン激小広告の当たり判定の広さはどのようなものなのか実際に検証してみます。

iOSのTweaks(脱獄アプリ)にAutoTouchというアプリが存在します。操作している指の動きを記録し、それをもとに自動操作を実行したりするアプリです。指の動きはLuaスクリプトで書かれているので、それを編集して1px単位の細かい操作を実行できます。

今回はこの大人気音楽ゲームの広告で試してみましょう。

FullSizeRender 2.jpg

×ボタンの中心座標は(1093,597)で、×ボタンの直径はこの端末では41pxでした。そこでLuaのスクリプトで遠くから×ボタンに向かって1pxずつタップする場所を変えながら×ボタンの中心へタップポイントを下の画像のように動かしていき、中心から何pxで反応するのか確かめてみます。

IMG_3199.JPG

コードはとてもシンプルです。Luaは見栄えが良いですね。


AdsTouchTest.lua

y = 592

x = 1087

color = getColor(y,x)
centerY = y
sec = 1000000

for i = 50,0,-1 do
tap(centerY + i, x)
usleep(sec/2)
if color ~= getColor(y,x) then
alert(i)
break
end
end



結果

なんとびっくり。結果は15(px)となりました。

FullSizeRender 4.jpg


本当に当たり判定は小さかった

xボタンの半径は21.5pxなわけですが、タッチできる範囲は中心から15px以内。ということで、この広告の×ボタンのタップ可能範囲..実際よりも小さいです…まさか本当に小さいだなんて…

当たり判定はButtonの円に内接する正方形だったのかもしれません。21.5/√2でだいたい辻褄が合うような気もします(憶測です)


まとめ

広告によって違いはあるとは思いますが、Buttonのタッチの判定が狭いのは気の所為ではなく本当にタッチできる範囲が狭いこともあるということがわかりました。

私の勝手な感覚では無理して指の先で狙うのではなく指の腹で全体的に押すと広告が消えてくれる気もしますが…まったく神経を使うゲームですね。これは脳トレです。AIMの精度を上げるためにみなさん右脳と指を鍛えましょう。本当にくだらない内容でしたが、最後まで読んでいただきありがとうございました。