iOS游戏控制手柄

iOS PlayStation 串流 SDK 本文介绍了一个开源的iOS端PS串流SDK,基于chiaki-ng核心代码实现。该SDK提供完整的PS4/PS5游戏串流功能,包括智能主机发现、安全注册、高质量音视频解码(支持H.264/H.265/HDR)、低延迟音频播放、完整手柄控制和体感反馈等特性。项目采用FFmpeg、SDL2、Opus等技术栈,通过Objective-C++桥接层移植到iOS平台,实现了与官方应用媲美的游戏串流体验。开发者可灵活配置分辨率、帧率等参数,并支持唤醒待机主机。 阅读详情
<p style="margin-top: 0px; margin-bottom: 0px; font-size: 24px; line-height: normal; font-family: Menlo;"><pre name="code" class="objc">#import "ViewController.h"
#import "DirectionControl.h"
@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
   
    DirectionControl *Controll = [[DirectionControl alloc] initWithFrame:CGRectMake(50, 100, 400, 400)];
    [self.view addSubview:Controll];
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

@end





DirectionControl.h



#import <UIKit/UIKit.h>
#import <takeControlView/takeControlView.h>




@interface DirectionControl : UIView{
    UIImageView *directionBg;
    UIImageView *controlBg;
    
    CGFloat SmallRockerCircleX,SmallRockerCircleY;
    
    int R;
    
}

@end

DirectionControl.m

#import "DirectionControl.h"


@implementation DirectionControl

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        // Initialization code
        [self loadView];
       // self.backgroundColor = [UIColor orangeColor];
    }
    return self;
}


-(void)loadView{
    
    UIImage *image = nil;
    image = [UIImage imageNamed:@"zhuan_2"];
    directionBg = [[UIImageView alloc] initWithImage:image];
    directionBg.frame = CGRectMake(0, 0, self.frame.size.width, self.frame.size.height);
    // directionBg.center = CGPointMake(,);
    directionBg.userInteractionEnabled = YES;
    [self addSubview:directionBg];
    //directionBg.backgroundColor = [UIColor redColor];
    image = [UIImage imageNamed:@"qiu_2"];
    controlBg = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 100, 100)];
    controlBg.center = CGPointMake(CGRectGetMidX(directionBg.bounds), CGRectGetMidY(directionBg.bounds));
    [controlBg setImage:image];
    //controlBg.backgroundColor = [UIColor greenColor];
    controlBg.userInteractionEnabled = YES;
    [directionBg addSubview:controlBg];
    
   // motorHolder = [[SMotorHolder alloc]init];
    UIPanGestureRecognizer *pan2 = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(panAction2:)];
    [self addGestureRecognizer:pan2];
}
-(void)panAction2:(UIPanGestureRecognizer *)recognizer{
    CGPoint p = [recognizer translationInView:controlBg];
    CGPoint pp = [recognizer locationInView:self];
    if (recognizer.state == UIGestureRecognizerStateBegan) {
        controlBg.center = pp;//将中间控制球的位置移动到开始位置
    }
    
    CGPoint moveXY = CGPointMake(controlBg.center.x+p.x, controlBg.center.y+p.y);
    
    if (moveXY.y<0) {
        moveXY.y=0;
    }
    if (moveXY.x<0) {
        moveXY.x=0;
    }
    
    if (recognizer.state == UIGestureRecognizerStateChanged) {
        //使小球随着手指运动
        controlBg.center = [[takeControlView sharedInstance] controlForCircleView:recognizer centerXY:directionBg.center moveXY:moveXY fingerXY:pp R:70];
        //防止移出屏幕
        [recognizer setTranslation:CGPointZero inView:self];
    }
    // CGRectGetMidX得到一个fram中心店的X坐标
    float x_offset =controlBg.center.x- CGRectGetMidX(directionBg.bounds) ;
    float y_offset =CGRectGetMidY(directionBg.bounds)-controlBg.center.y ;
    int xd= round(x_offset);
    int yd= round(y_offset);
    NSLog(@"%d, %d",xd,yd);
    //将小球限制在圈内
    if (xd<-100) {
        xd = -100;
    }
    if (xd>100) {
        xd = 100;
    }
    
    if (yd<-100) {
        yd = -100;
    }
    if (yd>100) {
        yd = 100;
    }
    //abs求绝对值
    if(abs(xd)<30){
        xd=0;
    }
    if (abs(yd)<30) {
        yd=0;
    }
    NSLog(@"xd == %d, yd == %d",xd,yd);
    [self sendCommandX:xd Y:yd];
    
    if (recognizer.state == UIGestureRecognizerStateEnded) {
        [UIView animateWithDuration:0.2 animations:^(void){
            //松开手时,小球移动到中间位置
            controlBg.center = CGPointMake(CGRectGetMidX(directionBg.bounds), CGRectGetMidY(directionBg.bounds));
            
        }completion:^(BOOL finished){
            for (int j = 0; j < 5; j ++) {
                //发送停止命令
                //[motorHolder stop];
            }
            num = 0;
            //NSLog(@"stop!!!!");
        }];
    }
}


int num = 0;
-(void)sendCommandX:(int)x Y:(int)y{
    if (ABS(x) > 25 && ABS(y) > 25) {
        //第一象限
        if (x > 0 && y > 0) {
            if (num == 1) {
                return;
            }
            num = 1;
            NSLog(@"X == %d Y == %d",x,y);
             NSLog(@"第一象限");
        }
        //第二象限
        else if (x < 0 && y > 0){
            if (num == 2) {
                return;
            }
            num = 2;
             NSLog(@"X == %d Y == %d",x,y);
            NSLog(@"第二象限");
        }
        //第三象限
        else if (x < 0 && y < 0){
            if (num == 3) {
                return;
            }
            num = 3;
             NSLog(@"X == %d Y == %d",x,y);
            NSLog(@"第三象限");
        }
        //第四象限
        else if (x > 0 && y < 0){
            if (num ==4) {
                return;
            }
             NSLog(@"X == %d Y == %d",x,y);
            num = 4;
             NSLog(@"第四象限");
        }
    }
    else{
        //前进
        if (abs(x) < 25 && y > 25) {
            if (num == 5) {
                return;
            }
             NSLog(@"X == %d Y == %d",x,y);
            num = 5;
            NSLog(@"前进");
        }
        //后退
        else if (abs(x) < 25 && y < -25){
            if (num == 6) {
                return;
            }
             NSLog(@"X == %d Y == %d",x,y);
            num = 6;
            NSLog(@"后退");
        }
        //左转
        else if (abs(y) < 25 && x < -25){
            if (num == 7) {
                return;
            }
             NSLog(@"X == %d Y == %d",x,y);
            num = 7;
            NSLog(@"左转");
        }
        //右转
        else if (abs(y) < 25 && x > 25){
            if (num == 8) {
                return;
            }
             NSLog(@"X == %d Y == %d",x,y);
            num = 8;
            NSLog(@"右转");
        }
    }
}

@end
使用时需要导入:http://pan.baidu.com/s/1mha1dyg

如何在iPhone上轻松配置Delta模拟器,畅玩NDS经典游戏 本文详细介绍了如何在iPhone上配置Delta模拟器,畅玩NDS经典游戏。从Delta模拟器的优势、安装步骤到BIOS文件配置和游戏ROM导入,提供了全面的指南。文章还涵盖了优化游戏体验的技巧和常见问题解决方法,帮助玩家轻松重温NDS经典游戏。 阅读详情

相关推荐

iOS虚拟手柄 SneakyInput 例程

官方下载的SneakInput例子,真机测试可用。iOS开发动作,射击类游戏可以参考。 个人觉得虽然已经实现了全部需求,但是虚拟手柄的触感确实没有真实手柄效果好

ios手柄研究

1.验证MFI:没有苹果认证的硬件芯片,蓝牙无法连接。 BLE4.0除外,MFi是苹果的一个开发者计划,针对硬件的。硬件和app配合使用。所以审核app肯定也很严格。因为MFi的硬件和app都要审核,app里用到蓝牙的。    在操作moga手柄时玩appstore下的原包,通过连接手柄弹出UI,抓到这个UI函数,然后动态调试传输字符串,发现其是一DES加密的验证码,破解难度较大,而且其验证码每

wruih的博客 3273

iOS手游 游戏手柄 开发

iOS 手机游戏 开发 游戏手柄,类似于传统的游戏手柄设计

初探使用iOS 7 Sprite Kit与Cocos2d开发游戏的对比

前言 iOS7 beta发布后,大部分开发者和用户的注意力都集中在了iOS 7的全新UI交互设计界面上。一直负责硬件工业设计的Jony Ive首次全面负责苹果的软件和硬件设计工作,自然要把他自己的设计理念完整诠释一番。加上和iOS之父Scott Forstall一直以来的不和,Jony对之前拟物化风格的全面颠覆设计也是必然的结果。      如今iOS7 已经出了beta3版本,在一番喧嚣的

richeninfo的专栏 1477

Paho Asynchronous MQTT C Client Library--MQTTAsync API

异步MQTT 客户端库for C

yoyo勰的博客 1263

SRS(简单实时视频服务) 笔记(5)- 视频录制

在SRS使用中实现视频录制功能。

irainsa的博客 1698

iOS GameController连接游戏手柄

环境:iOS 10.3.3 Xcode:  8.3.3 一、执行配置/连接方法 - (void)viewDidLoad { [super viewDidLoad]; self.view.backgroundColor = [UIColor whiteColor]; [self configureGameControllers]; } 二、配置方法

ChadPro 4769

解决Windows无法卸载补丁的实用方法

无法卸载Windows补丁可能是一个棘手的问题,但通过上述方法,你应该能够找到解决方案。无论是通过控制面板、命令提示符还是手动重置Windows更新组件,都有可能成功卸载问题补丁。如果所有方法都无效,系统还原将是一个值得尝试的备选方案。希望这篇文章能帮助你解决无法卸载补丁的问题。

mmoo_python的博客 1万+

IOS 蓝牙开发(六)蓝牙手柄 GameController开发

文章目录IOS 蓝牙开发(六)蓝牙手柄 GameController开发 IOS 蓝牙开发(六)蓝牙手柄 GameController开发

kyl282889543的博客 1368

LinuxCNC---在PC端显示开发板LinuxCNC界面

  今天在调试开发板时,执行开发板上的linuxcnc指令,总是出现如下报错 LINUXCNC - 2.9.0~pre0 application-specific initialization failed: couldn't connect to display "192.168.137.3:1" Error in startup script: invalid command name "image" while executing "image create photo -file $f/$i

中华田园巨龙 3469

基于稀疏表示字典学习的图像超分辨率-杨建超论文解析

文章:《Image Super-Resolution via Sparse Representation》 作者:杨建超 信号稀疏的定义: 令字典D的原子个数M,信号维度为N,则有以下三种关系: M = N时,D为完备的; M > N时,D为冗余的; M>>N时, D为过完备的。 图解如下: 借鉴了压缩感知的思想,通过对大量低分辨率图像和高分辨...

ycc18829026593的博客 7637

ios mfi手柄_适用于iPhone或iPad的最佳MFi游戏手柄

ios mfi手柄There are some surprisingly decent games on the iPhone, iPad, and Apple TV, but touch controls are usually…less than ideal. Many of those gamessupport full gamepads, though, so you can play ...

culunxun2863的博客 7941

第1章第11节:创建可容纳多行滚动文字的输入框TextEditor [SwiftUI快速入门到实战]

TextField可以让用户输入单行的文字内容,若想输入多行的文字内容,可以使用能够容纳多行滚动文字的 TextEditor。 定义一个字符串属性,用来存储用户输入的文字内容。接着定义一个布尔属性,用来标识是否弹出警告窗口,以显示用户输入的内容。 TextEditor是由UIKit中的UITextView演变而来,因此可以在init方法中,通过UITextView修改TextEditor的外观属性。 添加一个VStack视图,作为子视图的容器。 创建一个TextEditor,Te..

互动教程网[www.hdjc8.com] 832

【cocos2d-x】横向滚屏射击游戏②----虚拟控制手柄

因为iOS,Android设备使用触摸屏来输入,没有传统移动游戏设备配备的按钮,十字按钮或者模拟手柄,我们需要一个虚拟手柄来控制游戏。你可以使用虚拟手柄对游戏物体进行操控,就像使用实际的手柄一样。 SneakyInput控制手柄源码:点我下载 把×××下来,加入到你的项目中,别忘了在android.mk添加相关内容哦! 我们首要目标是添加一个可以让玩家进行飞船...

weixin_33978016的博客 172

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

在游戏开发中的使用icade手柄

apple store上的MFI游戏手柄动不动就要四五百元,但网上买的icade游戏手柄一个只要20几元。使用icade玩游戏的话如果不需要在游戏中打字游戏玩起来效果其实也不错。网上卖的icade手柄很小巧,如下图: 这种游戏手柄除了可以作为游戏手柄使用外,也可以当作手机自拍遥控,音量遥控。在app store上搜icade会找到很多相关的游戏。上图中的这个手柄应该是icade游戏手柄的简化版,他

Mage的专栏 4955

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

Gosu输入系统深度解析:键盘、鼠标和游戏手柄控制

Gosu作为一款强大的2D游戏开发库,为Ruby和C++开发者提供了全面的输入系统支持,轻松实现键盘、鼠标和游戏手柄的精准控制。本文将带你深入了解Gosu输入系统的核心功能与使用方法,助你打造流畅的游戏交互体验。 ## 一、Gosu输入系统架构概述 Gosu的输入系统通过`Input`类实现统一管理,位于[include/Gosu/Input.hpp](https://link.gitcode

gitblog_01076的博客 959

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

cocos2d滚屏射击游戏

第7章 滚屏射击游戏(上) 7.1 高级视差滚屏 7.1.1 将背景创建为底纹 将背景条纹分成单独的文件保存并不只是为了保持正确的Z轴次序,这么做还可以节省空间。 将背景条纹分成单独的文件保存还有助于保持高帧率。iOS设备的填充能力(每一帧可以画的像素个数)非常有限。由于图像经常会互相覆盖,iOS设备不得不在同一帧多次绘制相同的像素。最极端的情况是一幅全屏图像覆盖在另一幅全屏图像上,虽...

bsr1983的专栏 284

xbox手柄 查看您的控制器保修_iOS 14开始支持Xbox Elite无线控制器二代和Adaptive Controller...

苹果的WWDC开发者会议继续逐步透露出更多关于其最新的移动和桌面操作系统的新功能,包括iOS 14中对市面上流行的游戏手柄的支持。在周一的主题演讲中,苹果表示在tvOS 14中会支持Xbox的Elite无线控制器二代和Adaptive Controller,而周三的WWDC会议已经确认,这种支持将被延伸到iOS 14和iPadOS 14。会议内容涵盖了对Dual Shock的触摸板和灯条、Xbox...

weixin_33657398的博客 1539

使用了lov选择后页面无法滑动_ios13正式版iPhone11 pro max 20个iOS13使用技巧和隐藏功能分享...

20个iOS13使用技巧和隐藏功能:控制中心快速切换蓝牙设备和WiFi以往控制中心只能允许用户开启/关闭WiFi或者蓝牙功能,而在iOS 13系统中,只需长按蓝牙、WiFi图标,即可快速打开对应的列表,并进行快速切换和连接。快速调节音量iOS 13对音量条进行了调整,除了移动到屏幕左侧(音量键旁边)之外,还支持触控了。按下音量键呼出音量条之后可以上下滑动调整音量。长按呼出3D Touch菜单iPh...

weixin_42613773的博客 918

Delta模拟器终极指南:iOS设备上的经典游戏体验革命

Delta是一款专为非越狱iOS设备设计的全能经典视频游戏模拟器,让你在iPhone和iPad上重温童年经典游戏。无论你是想体验任天堂GBA的《口袋妖怪》冒险,还是想在N64上重温《超级马里奥64》的乐趣,Delta都能为你提供完美的怀旧游戏体验。这款开源模拟器支持NES、SNES、N64、GBC、GBA、DS和Sega Genesis等七大经典游戏平台,让你在移动设备上享受完整的复古游戏乐趣。

gitblog_00961的博客 995

超过2000款手柄支持!SDL_GameControllerDB覆盖平台与设备清单

SDL_GameControllerDB是一个社区维护的游戏控制器映射数据库,专为SDL2和SDL3游戏控制器功能设计。这个开源项目包含了超过2000款游戏手柄的配置文件,覆盖了从经典复古手柄到现代高端游戏控制器的完整支持列表。无论你是游戏开发者还是普通玩家,这个数据库都能让你的手柄在各种平台和游戏中获得最佳兼容性体验。🎮 ## 📊 项目规模与统计 SDL_GameControllerDB

gitblog_02152的博客 716

Delta模拟器终极指南:在iOS上重温经典游戏的完整方案

Delta是一款专为非越狱iOS设备设计的全能经典游戏模拟器,让你在iPhone或iPad上轻松畅玩NES、SNES、GBA、N64等多款经典游戏机的数千款游戏。无论你是怀旧玩家还是新一代游戏爱好者,Delta都能为你提供完整的模拟器解决方案。 ## 为什么选择Delta模拟器? 在众多iOS模拟器中,Delta凭借其专业性和易用性脱颖而出。它不仅仅是一个简单的模拟器,而是一个完整的游戏生态系

gitblog_01047的博客 797

PojavLauncher终极指南:如何使用蓝牙键盘与游戏手柄畅玩我的世界Java版

PojavLauncher是一款基于Boardwalk开发的Minecraft: Java Edition启动器,专为Android和iOS平台设计。本指南将详细介绍如何设置和优化蓝牙键盘与游戏手柄支持,让你在移动设备上获得更舒适的游戏体验。 [![PojavLauncher启动器界面](https://raw.gitcode.com/gh_mirrors/po/PojavLauncher/ra

gitblog_00008的博客 1828

iOS 7+ 手柄的使用方法,GameController.FrameWork

笔者昨天买回了G550 ,也就是 Logitech 的iOS 的手柄,支持iPhong 5 / iPhone 5s / iTouch 5 等等 最近在捣鼓个东西,之前也说过要学习Cocos2dx,手柄到了以后先找了几个游戏 试试感觉还不错。 之后链接xCode看GameController.frameWork 现在个大网站查关于手柄控制的资料。。。基本无功而返。 看

u014188660的专栏 2539
上一篇: 把一个开发者帐号下的app转移到另一个开发者帐号
下一篇: KVC/KVO简单用法
buildSetting
博客等级 码龄11年 36粉丝 76原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值